2010-09-08 84 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; } 
然后选择它