Селекторы свойств в QT CSS - PullRequest
       4

Селекторы свойств в QT CSS

3 голосов
/ 09 сентября 2010

У меня есть виджет дерева, который я использую для концепции пользователя / комнаты.Как я могу оформить комнаты независимо от пользователей в комнатах?Я предполагаю, что это как-то связано с селектором свойств QT в CSS?Я хотел бы иметь возможность сделать это:

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

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

Поскольку элементы в модели не являются объектами QObject (и не QWidgets), вы не сможете добавить свойство к элементу или стилизовать их с помощью таблиц стилей.

У меня есть два предложения делать то, что вы хотите сделать:

1) (только C ++) Присоедините QTreeView к QStandardItemModel, и когда вы добавляете элементы в качестве QStandardItem объектов, вы можете вызвать QStandardItem::setBackground() с Qt::blue или Qt::red в зависимости от Предметом является комната или пользователь.

2) (C ++ и CSS) Определите QStyledItemDelegate, который вы прикрепляете к QTreeView. При повторной реализации метода QStyledItemDelegate::paint() используйте QLabel для отображения содержимого элемента, затем установите свойство для этого QLabel. После этого вы сможете использовать таблицу стилей для настройки внешнего вида метки:

QLabel[isUser="true"] { background: blue; }
QLabel[isRoom="true"] { background: red; }
1 голос
/ 22 сентября 2010

Мне удалось выполнить то, что мне было нужно, создав метку, используя метод setProperty для этой метки, а затем с помощью функции setItemWidget прикрепил этот QLabel к соответствующему QTreeWidgetItem.Поэтому я бы не стал «стилизовать QTreeWidgetItem», а скорее стилизовал бы QLabel, который был наложен поверх QTreeWidgetItem.В следующем примере мой topLevelItem в QTreeWidget устанавливается готовым для стилизации как комнаты:

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...