Название: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 07, 2011, 17:12 Есть QCombobox, в качестве модели используется QStandardItemModel, каждый элемент QCombobox-а э то QStandardItem соответственно, QTreeView используется качестве представления. Пробую выделить некоторые (родительские) элементы комбобокса синим так:
Код или так: Код В выпадающем списке этот элемент выделен, однако когда я выбираю его из списка, то цвет текста возвращается к чёрному, который установлен по умолчанию. Как это можно исправить, чтобы при выделении элемента цвет текста сохранялся? Название: Re: Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 08, 2011, 19:50 У людей такие же проблемы: http://www.qtforum.org/article/26686/qcombobox-set-item-delegate-not-painting-for-current-item.html#post113116 - делегаты не спасают, будем отчёт об ошибках в Нокию писать.
Название: Re: Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 09, 2011, 00:50 Как только напишешь отчёт об ошибке в нокию (http://bugreports.qt.nokia.com/browse/QTBUG-17309) как сразу приходит идея с решением. ;) Решение: перехватываем сигнал currentIndexChanged(int) комбобокса (сигнал activated(QModelIndex) из QTreeView почему-то не перехватывается):
Код и в слоте пишем (способ нахождения текущего индекса (http://www.prog.org.ru/index.php?topic=16459.msg109390#msg109390) я уже здесь приводил (http://www.prog.org.ru/index.php?topic=16459.msg109390#msg109390), есть ещё более короткий (http://www.qtcentre.org/threads/31183-QComboBox-with-multipe-selection-via-tree)): Код Всё! Работает! :) Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: twp от Февраль 09, 2011, 14:37 а что, styleSheet не работает? К примеру так:
Код: QComboBox { Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 09, 2011, 15:35 Нет конечно. Потому, что в таком случае ты выделишь все элементы единообразно, а мне нужно только некоторые.
Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 09, 2011, 15:48 А можно слот ещё красивее и правильнее написать:
Код
Код
Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: twp от Февраль 09, 2011, 19:26 Нет конечно. Потому, что в таком случае ты выделишь все элементы единообразно, а мне нужно только некоторые. Да ну? Я так понимаю, что просто нет желания почитать документацию по styleSheet. А это очень мощный иструмент - позволяет уменьшить объем кода на С++ и не захламлять его настройками UI.Тем более что есть толковый перевод: http://www.doc.crossplatform.ru/qt/4.7.x/stylesheet.html (http://www.doc.crossplatform.ru/qt/4.7.x/stylesheet.html) По сабжу. Есть по крайней мере 3 способа указать стиль для конкретного виджета: 1. Установить в дизайнере. 2. Вызвать QWidget::setStyleSheet для конкретного виджета 3. Использовать Селектор идентификатора (ID): QComboBox#objectName { ... } В первом и втором случае имя класса опускается (QComboBox): Код: color: blue; Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 09, 2011, 21:20 Да ну!!! Посмотри внимательно на задачу. Все 3 твои варианта не сработают для неё. См. скриншоты, если не понял:
(http://img694.imageshack.us/img694/7761/34494006.png) (http://img525.imageshack.us/img525/4466/78731208.png) В твоём варианте ЛЮБОЙ выбранный элемент будет выделен, а мне нужно ТОЛЬКО когда выбраны родительские узлы. Возьми, если хочешь, здесь (http://bugreports.qt.nokia.com/browse/QTBUG-17309) исходник и попробуй свой способ. Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: twp от Февраль 10, 2011, 14:34 да согласен, я по другому задачу представлял, и по всей видимости одним qss эту задачу не решить. По идее ее можно решить с использованием динамических свойств, т.е. в том слоте, который обрабатывает изменение текущего индекса, менять для комбобокса динамическое свoйство (например hasChildren), в зависимости от того, имеет ли итем чайлдов или нет, а в qss прописать что-то типа такого:
Код: QComboBox[hasChildren="true"] { Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 11, 2011, 12:32 Для родительских узлов - возможно. Не пробовал такие вещи, не уверен насчёт синтаксиса. В моём последнем варианте слота ЛЮБОЙ элемент комбобокса можно подсвечивать любым цветом (фон, например, можно сделать аналогично) и комбобокс при выборе элемента будет подсвечиваться соответственно.
Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: Etud от Февраль 11, 2011, 19:49 AlekseyK, Вы достигли хорошего результата !
p.s. реально применял его для выбора всего-то нескольких вариантов. Как мне кажется - для этого он нужен. Название: Re: [РЕШЕНО] Выделение элемента в QCombobox цветом Отправлено: AlekseyK от Февраль 14, 2011, 13:45 Etud, спасибо! :)
|