Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QTabWidget изменение цвета строки через делегат |
Автор: vlarry 31.3.2016, 13:42 |
Добрый день. Как можно в делегате QTableWidget изменить цвет всей строки? Спасибо. |
Автор: ss 1.4.2016, 01:41 | ||||||||
можно установить деледат для конкретной строки tableWidget->setItemDelegateForRow(row,delegate); а в делегате есть
в этом методе нарисовать прямоугольник с геометрией rect и заливкой и вывести текст text (или все что необходимо). еще есть
можно использовать один делегат для всей таблицы переопределив
а в методе можно проверять index.column() и index.row() и выводить строки или отдельные айтамы нужными цветами (более подробно в хелпе Qt) Так же можно установить цвет фона роль в моделе для каждого item строки таблицы
|
Автор: vlarry 1.4.2016, 08:41 |
Да я и так переопределил paint и назначаю свою роль и по этой роли меняю цвет строки. Проблема как оказалось в том, что у меня в 3х из пяти колонках выводятся изображения (или не выводятся - если нужно) QPixmap и когда мне не надо выводить изображение, то я устанавливаю пустой QPixmap() и это изображение перекрывает фон. Как создать прозрачный QPixmap, чтобы не перекрывать фон? |
Автор: math64 1.4.2016, 10:00 |
Пустой Pixmap чёрного цвета (alpha=255) или прозрачный (alpha=0)? Нужно прозрачный. |
Автор: vlarry 1.4.2016, 10:13 | ||
нужен полностью прозрачный, чтобы не перекрывать фон. Думал создать просто прозрачный QPixmap в редакторе, но думаю это не правильно.... |
Автор: math64 1.4.2016, 13:16 | ||
Ну, насколько я понимаю, создавать прозрачный QPixmap нужно так:
|
Автор: ss 1.4.2016, 16:31 |
если пустой Pixmap то его можно вообще не рисовать. Поставить проверку на это. |
Автор: vlarry 1.4.2016, 16:52 |
У меня в зависимости от условий (состояние объекта) выводятся иконки в колонках. И когда я установил иконку при некотором условии, то после изменения состояния мне ее необходимо убрать, т.е. я понимаю надо поставить другую (пустую). Попробую через QPixmpa::fill. Спасибо. |
Автор: ss 1.4.2016, 17:40 | ||
зачем ? QPixmаp же пустой ? QPixmаp все равно не будет видно. Это лишняя работа рисовать пустые элементы. Будут айтамы у которых будут установленные QPixmаp и будут без айтамы без QPixmаp. Делегат не сохраняется для каждого айтама таблице. Он один для всех и на каждом новом цикле прорисовки таблицы его можно как угодно менять. т.е. указывать только то что нужно отобразить а в пустом QPixmаp смысла никакого нет |
Автор: vlarry 1.4.2016, 18:18 |
Спасибо, а я подумал, что в QTableWidgetItem состояние сохраняется. Попробую. |
Автор: vlarry 2.4.2016, 09:56 |
Спасибо. Все получилось. |
Автор: math64 4.4.2016, 08:05 |
Пустой пиксмап - место не занимет, текст у айтемов без пиксмапа сдвигается влево. Прозрачный пиксмап - на экране не отображается, но место занимает. Если размеры всех пиксмапов одинаковы, текст будет начинаться с одного и того же места. Прозрачный пиксмап можно добавить в таблицу, метод data(), или при прорисовке делегатом. Сохранять его в QTableWidgetItem - пустая трата памяти. |