![]() |
|
|
![]()
|
|
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Всем доброго времени суток!
Мне нужно закрасить фон некоторых строк в QListView определённым цветом. Поделитесь опытом кто делал такое? P.S. Отображаемые данные находятся под управлением модели основанной на QAbstractListItem, может в этом направлении нужно копать? |
|||
|
||||
| KADABRA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.8.2007 Репутация: 2 Всего: 3 |
Brodyaga,
Тогда просто, в переопределённом методе QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const для параметра role == Qt::BackgroundColorRole возвращаем нужный цвет. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
Brodyaga, не помню кто-то тут сказал: "Делегаты наше все"
|
|||
|
||||
| sergey_85 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 445 Регистрация: 17.4.2007 Где: Россия, Челябинск Репутация: нет Всего: 1 |
Привет!
Попробуй использовать QItemDelegate, переопредели метод void QItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const [virtual]
Можно глянуть Qt пример Qt Examples SpinBox Delegate Это сообщение отредактировал(а) sergey_85 - 20.1.2010, 09:12 -------------------- A good design always pays off. |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Мне нужно раскрасить строку не в момент редактирования и не при проводе мышкой над строкой, а при выполнении условий определённых. Как мне сделать так, чтобы метод paint вызвался для всех индексов в модели? в какой момент он вообще вызывается?
|
|||
|
||||
| chaos |
|
||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
пока еще не было задач по реализации своего делегата, но следуя логике: 1. метод paint вызовется для всех видимых item'ов 2. вызывается метод paint тогда, когда необходимо показать item'ы + принудительно Добавлено через 13 минут и 14 секунд если только так, то что мешает заюзать QTableWidget ? Наполняем его QTableWidgetItem и при каких хотите условиях у item'а меняете фон
|
||||
|
|||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
поторопился - последний предложенный способ будет работать "как надо" в случае 1го столбца иначе придется извращаться - всем item'ам с row = N менять цвет
|
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Тем, что у меня есть объекты для наполнения свои, и использую я QListView, так как колонка всегда одна. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
вывод не ясен.
не знал бы я про то что можно заюзать "MVC" то сделал бы так
Это сообщение отредактировал(а) chaos - 20.1.2010, 17:10 |
|||
|
||||
| KADABRA |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.8.2007 Репутация: 2 Всего: 3 |
Зачем так всё усложнять?
Приведённое мной решение позволяет в две строки решить эту задачу.
В этой модели, в методе
пишем
|
||||||
|
|||||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Придёться немного углубиться в задачу... Дело в том, что подсвечивать я хочу те строки, на которые можно перетащить объект из другого QListView... Следовательно, подсветка всегда у разных строк бывает. Как мне это в методе data предусмотреть? |
|||
|
||||
| KADABRA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.8.2007 Репутация: 2 Всего: 3 |
||||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
Да нет.. как мне в методе дата узнать надо подсвечиват или не надо заранее? Где мне сохранить объект перетаскиваемый, чтобы исследовать его на предмет того, подсвечивать ли определённую строку или нет? |
|||
|
||||
| KADABRA |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.8.2007 Репутация: 2 Всего: 3 |
Brodyaga,
А зачем заранее? В момент начала перетаскивания расчитайте что и как подсвечивать (или передайте модели что перетаскиваете, чтоб прямо в data считать), можно в модели метод создать onDragHighlight, и сделайте из модели emit dataChanged или layoutChanged. |
|||
|
||||
| Brodyaga |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: нет Всего: 2 |
В момент начала перетаскивания это и есть заранее Сделал специальный сигнал, но не могу его вызвать в методе, который вызывается в момент начала перетаскивания:
Выдаёт ошибку:
Из константного метода нельзя чтоли сигнал эммитить? Исправил этим
Это сообщение отредактировал(а) Brodyaga - 21.1.2010, 13:41 |
||||||||
|
|||||||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |