我有一个用于用户/房间概念的树小部件。我怎样才能让房间独立于房间内的用户?我假设它与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; }
然后选择它