Название: onDrawCell и TableWidget Отправлено: Playmaker от Март 12, 2009, 19:23 Здравствуйте!
Есть программа на Builder'е и Kylix'е. Надо переделать её на Qt. Много слышал о Qt, и вот мы встретились ;) . Есть там такой StringGrid и его событие StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State). Я так понял QTableWidget и paintEvent(QPaintEvent * event) - это ихние аналоги в Qt. Мне надо менять цвет текста, фон ячейки в фокусе, в выделенном состоянии в зависимости от текста, номера строки, столбца и состояния ячейки.У меня почти всё работает. Но я сделал это с помощью потомка QWindowsStyle, переопределяя метод drawPrimitive ( PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ), где element = QStyle::PE_PanelItemViewItem. Но таблица у меня не одна, да и в целом, по-моему, нелогично и неправильно так делать. Пытался по аналогии сделать в paintEvent'е, но ничего не получается... QPainter::begin: Widget painting can only begin as a result of a paintEvent QPainter::begin: Widget painting can only begin as a result of a paintEvent ... Много экспериментировал. Вот последнее, что у меня не работает :) Код: void MyTable::paintEvent(QPaintEvent * event) Как сделать описанные мной выше действия в paintEvent'е? Надоело разбираться. Help me! Название: Re: onDrawCell и TableWidget Отправлено: EhTemka от Март 12, 2009, 20:57 А что, если посмотреть в сторону делегатов - QAbstractItemDelegate и его наследники?
Название: Re: onDrawCell и TableWidget Отправлено: BaltikS от Март 12, 2009, 20:57 Советую ознакомиться с технолгией модель-представление... А в вашем случае нужно уснаследоваться от QItemDelegate и отрисовать в нём всё что захотите, запихнув его потом в модель
Название: Re: onDrawCell и TableWidget Отправлено: EhTemka от Март 12, 2009, 21:00 Советую ознакомиться с технолгией модель-представление... А в вашем случае нужно уснаследоваться от QItemDelegate и отрисовать в нём всё что захотите, запихнув его потом в модель Насколько я помню, делегат во вьювер "запихивается", так что можно обойтись и без модели, как таковой. Название: Re: onDrawCell и TableWidget Отправлено: BaltikS от Март 12, 2009, 21:49 да верно, написал не подумав...конечно во View :)
Название: Re: onDrawCell и TableWidget Отправлено: cresta от Март 14, 2009, 02:04 Цитировать QPainter::begin: Widget painting can only begin as a result of a paintEvent рисовать надо не на виджете, а на его viewport: Код: void MyWidget::paintEvent ( QPaintEvent * e){ |