Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задание цвета текста и фона недоступного QListWidgetItem с помощью QPalette или CSS
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Steklova Olga
Всем привет :)
1) Какая QPalette::ColorRole в QPalette QListWidget'а используется для отображения текста !isEnabled item'a?

2) Какая QPalette::ColorRole в QPalette QListWidget'а используется для отображения фона !isEnabled item'a?
Та же, что и для isEnabled, но !isSelected item'a (т.е. QPalette::Base)?
Можно QListWidget'у задать такую QPalette, в которой одновременно было бы указано, что
цвет фона !isEnabled item'a в !isEnabled QListWidget'е должен быть один (например yellow), а
цвет фона !isEnabled item'a в isEnabled QListWidget'е должен быть другой (например white)?

3) С помощью CSS можно указать цвета текста и фона !isEnabled item'a в QListWidget'е (без учета isEnabled/!isEnabled QListWidget'а):
listWidget->setStyleSheet("QListView::item:disabled {color: black; background: yellow;}");
Можно QListWidget'у задать такой styleSheet, в котором одновременно было бы указано, что
цвет фона !isEnabled item'a в !isEnabled QListWidget'е должен быть один (например yellow), а
цвет фона !isEnabled item'a в isEnabled QListWidget'е должен быть другой (например white)?
"QListView:disabled::item:disabled ..."
"QListView:!disabled::item:disabled ..." //не подходят для этой цели.
Алексей1153
Оля, в QtCreator , в редакторе формы в свойствах найди palette, откроется редактор. Там выбери детальное отображение цветов. А внизу окна - режим, который хочешь настраивать. И экспериментируй , так сказать, визуально )) Я лично там путаюсь немного, да и редко пользуюсь этим

потом можно открыть *.ui редактируемого диалога и найти, как там что расставилось.
Steklova Olga
Цитата(Steklova Olga @ 14.5.2014, 19:38) *
1) Какая QPalette::ColorRole в QPalette QListWidget'а используется для отображения текста !isEnabled item'a?
ColorRole QPalette::Dark исп для отобр текста !isEnabled item'a (isEnabled и !isEnabled QListWidget'а).

Цитата(Steklova Olga @ 14.5.2014, 19:38) *
2) Какая QPalette::ColorRole в QPalette QListWidget'а используется для отображения фона !isEnabled item'a?
ColorRole QPalette::Base исп для отобр фона (!isEnabled и !isSelected) item'a isEnabled QListWidget'а.
ColorRole QPalette::Window исп для отобр фона (!isEnabled и !isSelected) item'a !isEnabled QListWidget'а.

Цитата(Steklova Olga @ 14.5.2014, 19:38) *
3) Можно QListWidget'у задать такую QPalette или такой styleSheet, где одновременно было бы указано, что
цвет фона !isEnabled item'a в !isEnabled QListWidget'е должен быть один (например yellow), а
цвет фона !isEnabled item'a в isEnabled QListWidget'е должен быть другой (например white)?
Видимо, нельзя. Ну и не надо.

4)Мне, собственно, надо было внести следующие изменения в вариант по умолчанию:
- установить черный цвет текста для (!isEnabled и !isSelected) item QListWidget'а,
- отменить выделение цветом selected item'ов в !isEnabled QListWidget,
- отменить выделение цветом selected item'ов в isEnabled QListWidget, который !hasFocus.
Это получилось двумя способами.
С помощью QPalette:
MyListWidget::MyListWidget(QWidget *parent) :
    QListWidget(parent)
{
    QPalette palette = this->palette();
    //
    //(!isEnabled и !isSelected) item isEnabled QListWidget'а отобразится черным на белом
    //(!isEnabled и !isSelected) item !isEnabled QListWidget'а отобразится черным на светло-сером
    palette.setColor(QPalette::Disabled, QPalette::Text,
       palette.color(QPalette::Active,   QPalette::Text));
    //
    //отменяем выделение цветом
    //selected item'ов в !isEnabled QListWidget
    palette.setColor(QPalette::Disabled, QPalette::HighlightedText,
       palette.color(QPalette::Disabled, QPalette::Text));
    palette.setColor(QPalette::Disabled, QPalette::Highlight,
       palette.color(QPalette::Disabled, QPalette::Base));
    //
    //отменяем выделение цветом
    //selected item'ов в isEnabled QListWidget, который !hasFocus
    palette.setColor(QPalette::Inactive, QPalette::HighlightedText,
       palette.color(QPalette::Inactive, QPalette::Text));
    palette.setColor(QPalette::Inactive, QPalette::Highlight,
       palette.color(QPalette::Inactive, QPalette::Base));
    //
    this->setPalette(palette);
}
С помощью CSS:
slwStyleSheet =
        "QListView::item:disabled:!selected {"
        "    color: #000000;" //black
        "}"
        "QListView::item:disabled:selected {"
        "    color: #000000;" //black
        "    background: #ECE9D8;" //сер
        "}"

        "QListView::item:!disabled:active:!selected {"
        "    color: #000000;" //black
        "    background: #FFFFFF;" //white
        "}"
        "QListView::item:!disabled:active:selected {"
        "    color: #FFFFFF;" //white
        "    background: #316AC5;" //почти darkblue
        "}"
        "QListView::item:!disabled:!active:!selected {"
        "    color: #000000;" //black
        "    background: #FFFFFF;" //white
        "}"
        "QListView::item:!disabled:!active:selected {"
        "    color: #000000;" //black
        "    background: #FFFFFF;" //white
        "}"
       ;
listWidget->setStyleSheet(slwStyleSheet);
Алексей1153
в qss можно использовать алиасы цветов, список имён погляди в описании QColor

например

background: white;
Steklova Olga
Есть некоторые различия.
1) Смотрим Qt | Help | QColor | SVG color keyword names | 4.4 Recognized color keyword names:
darkblue rgb( 0, 0, 139)

2) Смотрим Qt | Help | QPalette:
QPalette::Highlight A color to indicate a selected item or the current item. By default, the highlight color is Qt::darkBlue.

3) Смотрим
QColor color = palette.color(QPalette::Active, QPalette::Highlight);
qDebug() << "r,g,b " << color.red() << color.green() << color.blue();
Получаем: "r,g,b 49 106 197"

А мне в qss нужен цвет Qt::darkBlue, а не darkblue, поэтому нужен код.
Steklova Olga
Возник еще один вопрос.
Например, имеется QListWidget с двумя item'ами: item(0) isEnabled, item(1) !isEnabled.
При клике по item(0) он отображается белым по темно-синему. Ok
Но, почему-то, если после этого несколько раз подряд кликнуть по item(1),
то item(0) отобразится черным по белому, только с рамкой штрихованного стиля.
Почему срабатывает клик по недоступному item? И почему он так обрабатывается?
Алексей1153
я думаю, что все изменения палитры нужно вводить по одному шагу (цвету), после чего смотреть поведение контрола. А так - одно гадание, почему и как теперь починить )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.