Russian Qt Forum
Март 29, 2024, 02:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Цвет выделения QListWidgetItem-а
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Цвет выделения QListWidgetItem-а (Прочитано 5827 раз)
Иволга
Чайник
Offline
Сообщений: 58
Цвет выделения QListWidgetItem-а
«
:
Ноябрь 21, 2019, 11:04 »
Добрый день.
Как для QListWidgetItem-а определять/переопределять цвет, которым он будет выделяться (Highligt) в QListWidget-e?
Необходимо использовать два определённых цвета, которые будут назначаться QListWidgetItem-у в зависимости от поступивших данных.
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Цвет выделения QListWidgetItem-а
«
Ответ #1 :
Ноябрь 22, 2019, 10:05 »
Нашла такое решение
Код:
class Delegate : public QStyledItemDelegate
{
Q_OBJECT
public:
Delegate(){}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (option.state & QStyle::State_Selected)
{
QVariant var = index.model()->data(index, Qt::UserRole);
painter->setPen(QColor(Qt::white)); // это не обязательно
painter->fillRect(option.rect, var.value<QColor>());
painter->drawText(option.rect, index.model()->data(index, Qt::DisplayRole).toString());
}
else
QStyledItemDelegate::paint(painter, option, index);
}
};
В конструкторе формы:
Код:
ui.listWidget->setItemDelegate(new Delegate());
Где-то внутри программы:
Код:
QColor color = getMyData() ? QColor(Qt::darkGreen) : QColor(Qt::darkBlue);
myItem->setData(Qt::UserRole, color);
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Цвет выделения QListWidgetItem-а
«
Ответ #2 :
Ноябрь 22, 2019, 13:00 »
Немного переделала, т.к. предыдущий вариант искажает форматирование текстового содержимого item-a.
Код:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem myOpt(option);
if (option.state & QStyle::State_Selected)
{
QPalette pal(myOpt.palette);
QVariant var = index.model()->data(index, Qt::UserRole);
pal.setColor(QPalette::Highlight,var.value<QColor>());
myOpt.palette = pal;
}
QStyledItemDelegate::paint(painter, myOpt, index);
}
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Цвет выделения QListWidgetItem-а
«
Ответ #3 :
Ноябрь 23, 2019, 10:36 »
Я это делал через qss
Код:
QListView {
color: rgb(127, 0, 63);
background-color: rgb(255, 255, 241);
selection-color: white;
selection-background-color: rgb(191, 31, 0);
}
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Цвет выделения QListWidgetItem-а
«
Ответ #4 :
Ноябрь 23, 2019, 10:47 »
Цитата: Day от Ноябрь 23, 2019, 10:36
Я это делал через qss
Код:
QListView {
color: rgb(127, 0, 63);
background-color: rgb(255, 255, 241);
selection-color: white;
selection-background-color: rgb(191, 31, 0);
}
А где здесь два или больше цвета для выделения? Я вижу только один для текста и один для фона.
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Цвет выделения QListWidgetItem-а
«
Ответ #5 :
Ноябрь 23, 2019, 10:57 »
Иволга
, Да, простите, не врубился в вопрос...
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Цвет выделения QListWidgetItem-а
«
Ответ #6 :
Ноябрь 23, 2019, 11:03 »
Иволга
Но если использовать QListView, то метод модели data может выдавать что угодно, в том числе и цвет фона, в зависимости от выделенности, содержания и даже от времени суток
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Цвет выделения QListWidgetItem-а
«
Ответ #7 :
Ноябрь 23, 2019, 11:14 »
Цитата: Day от Ноябрь 23, 2019, 11:03
Иволга
Но если использовать QListView, то метод модели data может выдавать что угодно, в том числе и цвет фона, в зависимости от выделенности, содержания и даже от времени суток
Можете пример привести? Я в теме "модель/представление" не очень разбираюсь...
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Цвет выделения QListWidgetItem-а
«
Ответ #8 :
Ноябрь 23, 2019, 12:45 »
Цитата: Иволга от Ноябрь 23, 2019, 11:14
Можете пример привести? Я в теме "модель/представление" не очень разбираюсь...
Ну, в этом случае как бы и примеры бесполезны... Вы попробуйте разобраться... Все равно, я думаю, придется. Мне вот пришлось. И разница во времени - на порядок.
Во время разборки вот какие истины я усек (видимо, тривиальные).
Как модель хранит данные - это лично ее дело. Может даже на лету составлять. Я вот хранил в виде вектора строк специфической для задачи структуры. Ее дело - на запрос стандартного делегата давать Текст, Шрифт, Цвета, Размеры. Ели не знает, что выдать - выдает пустой (незначимый) QVaring. Тогда представление само разберется (по умолчанию).
Собственно, при использовании модели свой делегат практически не нужен. То есть должны быть серьезные основания, чтобы не довериться стандартному. Например, если вы хотите некоторые ячейки перечеркнуть по диагоналям.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...