是的,這是可能的!
如果您不想使用當前樣式,您將不得不實現您自己的QStyledItemDelegate
(或),但不建議使用)。在那裏你可以繪製任何你想要的(包括不同的選擇顏色)。要使用模型的特殊功能,請使用自定義項目角色或將QModelIndex::model()
轉換爲您自己的模型實現。 (如果需要更多的細節,我可以發佈更多)
編輯一個簡單的例子:
在你的模型做的事:
QVariant MyModel::data(const QModelIndex &index, int role) const
{
switch(role) {
//...
case (Qt::UserRole + 3)://as an example, can be anything greater or equal to Qt::UserRole
return (selectionVar == 0);
//...
}
}
創建新的委託類的地方:
class HighlightDelegate : public QItemDelegate //QStyledItemDelegate would be better, but it wasn't able to change the styled highlight color there
{
public:
HighlightDelegate(QObject *parent);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
};
HighlightDelegate::HighlightDelegate(QObject *parent) :
QItemDelegate(parent)
{}
void HighlightDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem opt = option;
if(index.model()->data(index, Qt::UserRole + 3).toBool())//same here
opt.palette.setColor(QPalette::Highlight, Qt::red);
this->QItemDelegate::paint(painter, opt, index);
}
...並告訴視圖使用代理人:
this->ui->itemView->setItemDelegate(new HighlightDelegate(this));
而那就是它!這個(如你所見)是使用QItemDelegate
創建的。似乎不可能用QStyledItemDelegate
創建它,因爲它將忽略QPalette::Highlight
(至少在窗口中)。
對不起,我不太瞭解如何使用qitemdelegate,你能給我一個簡短的例子,我如何在我的情況下實現它?謝謝(y) –
這看起來不錯..我試過了,但我仍然有這個問題,當我點擊時,像圖標這樣的複選框出現在我的單元格內。另外,當我切換我的選擇時,當我點擊其他地方時,已經選擇的單元也會改變顏色。我的代碼n的結果如圖所示。 –
Table-> setItemDelegate(new HighlightDelegate(this));表 - >則setModel(網格); –