我有一個用於用戶/房間概念的樹小部件。我怎樣才能讓房間獨立於房間內的用戶?我假設它與CSS中的QT屬性選擇器有關?我希望能夠做到這一點:QT CSS中的屬性選擇器
QTreeView::item[isUser="true"] { background: blue; }
QTreeView::item[isRoom="true"] { background: red; }
我有一個用於用戶/房間概念的樹小部件。我怎樣才能讓房間獨立於房間內的用戶?我假設它與CSS中的QT屬性選擇器有關?我希望能夠做到這一點:QT CSS中的屬性選擇器
QTreeView::item[isUser="true"] { background: blue; }
QTreeView::item[isRoom="true"] { background: red; }
由於在模型的項目不是的QObject(也不QWidgets),您將無法添加屬性的項目,或者樣式表樣式。
我做你想要做的兩點建議:
1)(僅限於C++)附上您的QTreeView
到QStandardItemModel
,並添加內容時爲QStandardItem
對象,你可以調用QStandardItem::setBackground()
有兩種Qt::blue
或Qt::red
取決於物品是房間還是用戶。
2)(C++和CSS)定義您附加到您的QTreeView
的QStyledItemDelegate
。在重新實現QStyledItemDelegate::paint()
方法時,使用QLabel
來顯示該項目的內容,然後在該QLabel
上設置一個屬性。然後,您就可以使用樣式表來定製標籤的外觀:
QLabel[isUser="true"] { background: blue; }
QLabel[isRoom="true"] { background: red; }
我能做到什麼,我需要通過創建一個標籤,使用setProperty
方法的標籤上,然後使用setItemWidget
函數將該QLabel附加到適當的QTreeWidgetItem。所以我不會「設計QTreeWidgetItem」,而是將QLabel重疊在QTreeWidgetItem之上。下面的示例將我在QTreeWidget topLevelItem是準備作爲風格的房間:
QTreeWidgetItem *topItem = ui->treeWidget->topLevelItem(0);
currentLabel = new QLabel;
currentLabel->setProperty("room",true);
currentLabel->setText(QString("Room Lobby"));
ui->treeWidget->setItemWidget(topItem,0,currentLabel);`
我可以在樣式表與
QLabel[room="true"] { background: red; }
然後選擇它