我有一個QTreeView顯示我的數據,我已經安裝了一個自定義的代表到其中一列顯示一個彩色的進度條,外觀取決於內容。我能夠模擬使用提供的顏色信息的默認委託行爲由option.palette
:QTreeView自定義項目顯示代理和CSS
class ProgressBarDelegate : public QStyledItemDelegate
{
public:
ProgressBarDelegate(QObject *parent = 0) {}
~ProgressBarDelegate() {}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
// QStyledItemDelegate::paint(painter, option, index); // default implementation
painter->save();
// progressbar construction and drawing
painter->restore();
}
};
現在,我想強調鼠標懸停事件一行。我設置自定義CSS樹視圖:
ui->treeView->setStyleSheet("QTreeView::item:hover{background-color:#D0E0F0;}");
懸停突出的作品,但是,果然,我的自定義委託執行忽略CSS設置:
(Darkblue線是選擇item,lightblue-ish行是CSS懸停高亮行)
啓用默認實現允許CSS設置影響我的代理,但它弄亂了圖片:
的問題是:
- 有沒有辦法知道從withing委託壓倒一切的CSS設置數據?
option.palette
似乎並未包含此信息。
我試圖讀取QTreeView則屬性作爲descried here:
qDebug() << treeView()->property("background");
但控制檯顯示QVariant(Invalid)
我還試圖讀取的Qt源代碼drawControl()
和drawPrimitive()
方法,其中使用在默認的委託實現中,但我設法只能找到小部件選項板引用,並且沒有與CSS覆蓋的連接。
是的,我真的希望我不需要手動檢測所有需要的狀態。我想我將不得不實施你的解決方案。 – Kef