Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: Mike от Март 02, 2007, 09:39 Сделал делегат для QTableView. В нем пишу:
Код: void cStyleDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex& index) const Цвет шрифта меняется. Цвет фона меняется только для выделенной ячейки. Почему не работает p.setColor(QPalette::Base, BackColor);? Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: vregess от Март 02, 2007, 20:23 Как вариант можно попробывать изменять цвет ячейки из модели.
Код:
Еще можно непосредственно при создании итема указать цвет фона Код:
А так как ты сделал, в смысле по такой же технологии, у меня тоже пока не получилось. Сам голову ломаю как сделать. У кого-нибудь вообще получалось? Зашел на форум с этим вопросом, а ты уже его задал... Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: Alexei от Март 02, 2007, 21:24 Цвет фона задается ролью Qt::BackgroundRole у элемента модели, поэтому QPalette::Base не влияет на отрисовку фона.
Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: vregess от Март 03, 2007, 07:24 Цитата: "Alexei" Цвет фона задается ролью Qt::BackgroundRole у элемента модели, поэтому QPalette::Base не влияет на отрисовку фона. Так ведь и шрифт задается ролью Qt::FontRole, но в делегате его можно поменять. В доке написано, что Цитировать Qt::FontRole - The font used for items rendered with the default delegate. Qt::BackgroundColorRole - The background color used for items rendered with the default delegate. Т.е. это относится к default delegate. Шрифт то можно поменять из своего делегата, а цвет фона - не получается. Вот и непонятно... Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: Alexei от Март 03, 2007, 08:16 QItemDelegate::paint вызывает drawBackground для отрисовки фона.
Посмотри реализацию drawBackground ($QTDIR\src\gui\itemviews\qitemdelegate.cpp) и станет все ясно. Версия 4.2.2. Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: vregess от Март 03, 2007, 09:53 Цитата: "Alexei" QItemDelegate::paint вызывает drawBackground для отрисовки фона. Посмотри реализацию drawBackground ($QTDIR\src\gui\itemviews\qitemdelegate.cpp) и станет все ясно. Версия 4.2.2. действительно... посмотрел. понял. Код:
Получается, что если модель возвращает не валидный результат, то делегат ничего не делает, иначе - красит в указанный цвет. Пока нашел такой выход (на примере QTableWidget): При создании итема указываем дефолтный QVariant: Код:
Далее создаем простенький делегат и переопределяем метод paint: Код:
Ну в общем такая примерно технология... Название: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: Alexei от Март 04, 2007, 12:51 Если цвет фона зависит от элемента модели, а не от момента его отрисовки, то нет смысла переопределять метод paint делегата: достаточно задать цвет элемента:
item->setData(Qt::BackgroundColor, Qt::red) Также не обязательно использовать QTableWidget и QTableWidgetItem, если в этом нет необходимости. Если у тебя своя модель данных, то при ее заполнении нужно задать цвет фона для каждого элемента. В этом случае достаточно QTableView вместо QTableWidget. Название: Re: [4.2.2] Не могу закрасить ячейку у QTableView Отправлено: FantasyOR от Июль 16, 2010, 13:29 все одно не понял :-\
если я создаю свою модель от QAbstractTableModel, естественно переопределяю "QVariant data(const QModelIndex &index, int role ) const;", то какую роль нужно отлавливать и что возвращать? я делаю так: Код: if (role == Qt::BackgroundRole) фон ячейки не изменяется. пожалуйста помогите, не надо слов, дайте народу код. |