Russian Qt Forum
Май 05, 2024, 19:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QComboBox - текст айтемов разными цветами  (Прочитано 6494 раз)
once_again_abc
Гость
« : Сентябрь 19, 2011, 09:37 »

как это можно сделать самым простым способом?
Записан
BRE
Гость
« Ответ #1 : Сентябрь 19, 2011, 09:38 »

как это можно сделать самым простым способом?
Делагатом.
Записан
once_again_abc
Гость
« Ответ #2 : Сентябрь 19, 2011, 09:47 »

как это можно сделать самым простым способом?
Делагатом.

зашибись ответ, очень помогает новичку  Смеющийся   так торопились, что даже ошибку в слове сделали =)))
Записан
BRE
Гость
« Ответ #3 : Сентябрь 19, 2011, 09:56 »

зашибись ответ, очень помогает новичку  Смеющийся   так торопились, что даже ошибку в слове сделали =)))
Я тебе направление показал. Улыбающийся
Посмотри примеры, почитай про QItemDelegate. Или можно в самой моделе обрабатывать роль Qt::TextColorRole.
Так понятней.  Строит глазки
« Последнее редактирование: Сентябрь 19, 2011, 10:04 от BRE » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Сентябрь 19, 2011, 10:11 »

Можно и без делегатов:
Код
C++ (Qt)
#include <QApplication>
#include <QComboBox>
#include <QStandardItemModel>
 
int main( int argc, char** argv )
{
QApplication app( argc, argv );
 
QComboBox cb;
char *colors[] = { "brown", "orange", "yellow", "green", "lightblue", "blue", "purple" };
QStandardItemModel* m = qobject_cast< QStandardItemModel* >( cb.model() );
 
m->setRowCount( 7 );
for( int i = 0; i < 7; i++ )
{
QModelIndex mi = m->index( i, 0 );
m->setData( mi, colors[i], Qt::DisplayRole );
m->setData( mi, QColor( colors[i] ), Qt::TextColorRole );
m->setData( mi, QColor( colors[i] ), Qt::DecorationRole );
}
 
cb.show();
return app.exec();
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
« Ответ #5 : Сентябрь 19, 2011, 10:31 »

что-то не работает у меня последний вариант.
в конструкторе родителя-виджета создаю динамически CheckBoxList( QWidget *widget ) : QComboBox(widget)
затем 32 раза addItem

в обработчике CheckBoxList::paintEvent(QPaintEvent *)

делаю так:

Код:
    

QStandardItemModel* m = qobject_cast< QStandardItemModel* >( this->model() );

for( int i = 0; i < 32; i++ )
{
QModelIndex mi = m->index( i, 0 );
                m->setData( mi, QColor(255,0,255), Qt::ForegroundRole );
}

ПС. что такое модель/данные в кьюте пока не знаю, сегодня только начну изучать эту тему так что прошу не пугать меня сейчас этими словами =)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Сентябрь 19, 2011, 10:38 »

Цитировать
что-то не работает у меня последний вариант.
Что значит не работает? Это 100% работающий пример.

Цитировать
ПС. что такое модель/данные в кьюте пока не знаю, сегодня только начну изучать эту тему так что прошу не пугать меня сейчас этими словами =)
Так вот возьми и научись сначала, чтобы не писать такие глупости.
Записан

Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
« Ответ #7 : Сентябрь 19, 2011, 10:45 »

Так вот возьми и научись сначала, чтобы не писать такие глупости.

вот эта фраза и есть самая настоящая глупость.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Сентябрь 19, 2011, 10:52 »

Так вот возьми и научись сначала, чтобы не писать такие глупости.

вот эта фраза и есть самая настоящая глупость.

Чтобы говорить здесь о глупости, надо хотя бы немного иметь представление о чём идёт речь.
Меняя данные в модели данных ниспадающего списка в методе отрисовки комбобокса ты делаешь такую глупость, что даже не смешно...
Записан

Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
« Ответ #9 : Сентябрь 19, 2011, 11:19 »

Так вот возьми и научись сначала, чтобы не писать такие глупости.

вот эта фраза и есть самая настоящая глупость.

Чтобы говорить здесь о глупости, надо хотя бы немного иметь представление о чём идёт речь.
Меняя данные в модели данных ниспадающего списка в методе отрисовки комбобокса ты делаешь такую глупость, что даже не смешно...

мне самому не смешно, поэтому я и задаю здесь вопросы, для кого-то возможно глупые и смешные.
на изучение делегатов/моделей уйдет время, а я надеялся получить здесь решение, которое я смогу использовать прямо сейчас. если бы я уже знал что такое делегаты и как использовать модели для кастомизации кьютишных элементов то меня бы здесь не было с такими вопросами. очевидно.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Сентябрь 19, 2011, 11:24 »

Я тебе дал 100% работающий пример. В чём проблемы?
Зачем ты в paintEvent() делаешь установку цвета текста Непонимающий
Это нужно делать хотя бы в конструкторе. Хотя мне непонятно зачем ты создаёшь свой класс.
Записан

Qt 5.11/4.8.7 (X11/Win)
Rem Norton
Гость
« Ответ #11 : Сентябрь 19, 2011, 11:34 »

2 once_again_abc:
1. Если решил использовать Qt, то лучше сразу забудь все, что знал о MFC, Delphi и т.д. Тут все по-человечески сделано Улыбающийся
2. GreatSnake дал 100% рабочий код, не требующий изменений. Ctrl+C, Ctrl+V и все.
3. Когда задаешь вопрос, слушай ответ.
Записан
Странник
Гость
« Ответ #12 : Сентябрь 19, 2011, 12:39 »

есть вопрос в тему. как изменить цвет фона элемента в выпадающем списке QComboBox мне понятно (рис. 1). но цвет фона текущего элемента остается по умолчанию (рис. 2). как бы увязать их поизящнее?
Записан
Rem Norton
Гость
« Ответ #13 : Сентябрь 19, 2011, 12:44 »

Это делается через styleSheet непосредственно виджета, но я, пардон, не помню точно как.
Записан
Странник
Гость
« Ответ #14 : Сентябрь 19, 2011, 13:00 »

Это делается через styleSheet непосредственно виджета, но я, пардон, не помню точно как.
я помню = ) но тайно надеюсь, что есть решение лучше, чем по сигналу currentIndexChanged менять stylesheet для виджета в зависимости от BackgroundRole текущего элемента..
« Последнее редактирование: Сентябрь 19, 2011, 13:05 от Странник » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 22.