2010-12-14 104 views
0

我正在使用一個QItemDelegate結合QTableView的IsUserCheckable標誌來繪製一箇中心複選框列。所有的工作都很好,直到我爲表格啓用了行選擇。Qt:複選框和QItemDelegate-沒有繪製複選框時發生選擇

當選擇發生時,藍色選擇背景是唯一繪製的,並且不再顯示覆選框。

以下是我用來繪製委託內複選框的代碼。

void CheckboxDelegate::drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const 
{ 
    QSize size = check(option, option.rect, Qt::Checked).size(); 
    QRect checkboxRect = QStyle::alignedRect(option.direction, Qt::AlignCenter, size, option.rect); 
    QItemDelegate::drawCheck(painter, option, checkboxRect, state); 
} 

任何想法爲什麼選擇時不能正確繪畫?

+1

你真的需要發佈更多的代碼。我猜你的訂購會搞砸,而你在繪製複選框後繪製藍色背景** – Robert 2010-12-14 21:29:31

+0

這是唯一能夠繪製任何東西的相關代碼。我想象這個問題與我提到的畫的順序有關,但我不確定如何在這一點上實施適當的步驟。希望有人能提供更多的見解。 – cweston 2010-12-15 00:58:59

回答

0

很難確定我的回答會幫助你,因爲缺少已發佈的代碼,但我認爲你的問題在於,畫家不僅繪製QRect,而且繪製QItemDelegate。這意味着除非你明確告訴它你想要QRect的顏色是什麼,否則它會將它繪成與整個單元格相同的顏色。

如果這是真的,那麼您的QRect仍然存在,但與單元格其餘內容的顏色完全相同。

您可以通過執行painter.setPen(QColor.red);

改變畫家,查閱QRect的顏色同樣,我沒有太多的代碼關閉的工作,但如果你想檢查以不同的顏色,你需要將其設置爲不同的顏色。

如果你提供更多的代碼,我可以更清楚地回答你。

+0

當然,我是用Java做的(你可以在C++中做同樣的事情) – Ryan 2011-07-20 21:41:18