crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Задание цвета текста и фона недоступного QListWidgetItem с помощью QPalette или CSS
Steklova Olga
  опции профиля:
сообщение 14.5.2014, 19:38
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Всем привет :)
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
  опции профиля:
сообщение 15.5.2014, 9:16
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2933
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Оля, в QtCreator , в редакторе формы в свойствах найди palette, откроется редактор. Там выбери детальное отображение цветов. А внизу окна - режим, который хочешь настраивать. И экспериментируй , так сказать, визуально )) Я лично там путаюсь немного, да и редко пользуюсь этим

потом можно открыть *.ui редактируемого диалога и найти, как там что расставилось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 15.5.2014, 13:40
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Цитата(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
  опции профиля:
сообщение 15.5.2014, 13:53
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2933
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


в qss можно использовать алиасы цветов, список имён погляди в описании QColor

например

background: white;

Сообщение отредактировал Алексей1153 - 15.5.2014, 13:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 15.5.2014, 14:46
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Есть некоторые различия.
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
  опции профиля:
сообщение 15.5.2014, 17:26
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Возник еще один вопрос.
Например, имеется QListWidget с двумя item'ами: item(0) isEnabled, item(1) !isEnabled.
При клике по item(0) он отображается белым по темно-синему. Ok
Но, почему-то, если после этого несколько раз подряд кликнуть по item(1),
то item(0) отобразится черным по белому, только с рамкой штрихованного стиля.
Почему срабатывает клик по недоступному item? И почему он так обрабатывается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 18.5.2014, 11:19
Сообщение #7


фрилансер
******

Группа: Участник
Сообщений: 2933
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


я думаю, что все изменения палитры нужно вводить по одному шагу (цвету), после чего смотреть поведение контрола. А так - одно гадание, почему и как теперь починить )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.8.2022, 15:17