Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QTabWidget изменение цвета строки через делегат 
V
    Опции темы
vlarry
Дата 31.3.2016, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Добрый день.
Как можно в делегате QTableWidget изменить цвет всей строки?

Спасибо.

Это сообщение отредактировал(а) vlarry - 2.4.2016, 09:57
PM MAIL   Вверх
ss
Дата 1.4.2016, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007

Репутация: нет
Всего: нет



можно установить деледат для конкретной строки tableWidget->setItemDelegateForRow(row,delegate);
а в делегате есть 
Код

protected:
    void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option,
                                 const QRect &rect, const QString &text) const;

в этом методе нарисовать прямоугольник с геометрией rect и заливкой и вывести текст text (или все что необходимо).


еще есть 
Код

void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const


можно использовать один  делегат для всей таблицы переопределив
Код

void QItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

а в методе можно проверять index.column() и index.row() и выводить строки или отдельные айтамы нужными цветами (более подробно в хелпе Qt)

Так же можно установить цвет фона роль в моделе для каждого item строки таблицы
Код

    QStandardItemModel *model = (QStandardItemModel*)tableWidget->model();
    for(int i = 0; i < tableWidget->columnCount(); ++i
        model->setData(model->index(row,i),QColor("red"),Qt::BackgroundRole);


Это сообщение отредактировал(а) ss - 1.4.2016, 05:02
PM MAIL   Вверх
vlarry
Дата 1.4.2016, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Да я и так переопределил paint и назначаю свою роль и по этой роли меняю цвет строки. Проблема как оказалось в том, что у меня в 3х из пяти колонках выводятся изображения (или не выводятся - если нужно) QPixmap и когда мне не надо выводить изображение, то я устанавливаю пустой QPixmap() и это изображение перекрывает фон. Как создать прозрачный QPixmap, чтобы не перекрывать фон?

Это сообщение отредактировал(а) vlarry - 1.4.2016, 08:41
PM MAIL   Вверх
math64
Дата 1.4.2016, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Пустой Pixmap чёрного цвета (alpha=255) или прозрачный (alpha=0)? Нужно прозрачный.
PM   Вверх
vlarry
Дата 1.4.2016, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Цитата(math64 @ 1.4.2016,  10:00)
Пустой Pixmap чёрного цвета (alpha=255) или прозрачный (alpha=0)? Нужно прозрачный.

нужен полностью прозрачный, чтобы не перекрывать фон. Думал создать просто прозрачный QPixmap в редакторе, но думаю это не правильно....
PM MAIL   Вверх
math64
Дата 1.4.2016, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Ну, насколько я понимаю, создавать прозрачный QPixmap нужно так:
Код

QPixmap px(width,height);
px.fill(QColor(0,0,0,0));

PM   Вверх
ss
Дата 1.4.2016, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007

Репутация: нет
Всего: нет



если пустой Pixmap то его можно вообще не рисовать. Поставить проверку на это.
PM MAIL   Вверх
vlarry
Дата 1.4.2016, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



У меня в зависимости от условий (состояние объекта) выводятся иконки в колонках. И когда я установил иконку при некотором условии, то после изменения состояния мне ее необходимо убрать, т.е. я понимаю надо поставить другую (пустую). Попробую через QPixmpa::fill. Спасибо.
PM MAIL   Вверх
ss
Дата 1.4.2016, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007

Репутация: нет
Всего: нет



Цитата

 надо поставить другую (пустую)


зачем ? QPixmаp же пустой ? QPixmаp все равно не будет видно. Это лишняя работа рисовать пустые элементы. Будут айтамы у которых будут установленные  QPixmаp и будут без айтамы без QPixmаp. 

Делегат не сохраняется для каждого айтама таблице. Он один для всех и на каждом новом цикле прорисовки таблицы его можно как угодно менять. т.е. указывать только то что нужно отобразить а в пустом QPixmаp смысла никакого нет
PM MAIL   Вверх
vlarry
Дата 1.4.2016, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Спасибо, а я подумал, что в QTableWidgetItem состояние сохраняется. Попробую. 
PM MAIL   Вверх
vlarry
Дата 2.4.2016, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

Репутация: нет
Всего: нет



Спасибо. Все получилось.
PM MAIL   Вверх
math64
Дата 4.4.2016, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Пустой пиксмап - место не занимет, текст у айтемов без пиксмапа сдвигается влево.
Прозрачный пиксмап - на экране не отображается, но место занимает. Если размеры всех пиксмапов одинаковы, текст будет начинаться с одного и того же места.
Прозрачный пиксмап можно добавить в таблицу, метод data(), или при прорисовке делегатом. Сохранять его в QTableWidgetItem - пустая трата памяти.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1444 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.