2010-09-08 105 views
3

我有一個用於用戶/房間概念的樹小部件。我怎樣才能讓房間獨立於房間內的用戶?我假設它與CSS中的QT屬性選擇器有關?我希望能夠做到這一點:QT CSS中的屬性選擇器

QTreeView::item[isUser="true"] { background: blue; } 
QTreeView::item[isRoom="true"] { background: red; } 

回答

3

由於在模型的項目不是的QObject(也不QWidgets),您將無法添加屬性的項目,或者樣式表樣式。

我做你想要做的兩點建議:

1)(僅限於C++)附上您的QTreeViewQStandardItemModel,並添加內容時爲QStandardItem對象,你可以調用QStandardItem::setBackground()有兩種Qt::blueQt::red取決於物品是房間還是用戶。

2)(C++和CSS)定義您附加到您的QTreeViewQStyledItemDelegate。在重新實現QStyledItemDelegate::paint()方法時,使用QLabel來顯示該項目的內容,然後在該QLabel上設置一個屬性。然後,您就可以使用樣式表來定製標籤的外觀:

QLabel[isUser="true"] { background: blue; } 
QLabel[isRoom="true"] { background: red; } 
1

我能做到什麼,我需要通過創建一個標籤,使用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; } 
然後選擇它