Здравствуйте!
Есть программа на 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)
{
QPainter p(this);
QStyleOptionViewItemV4 opt;
opt.initFrom(this);
if (opt.state & QStyle::State_Selected)
{
p.fillRect(opt.rect,QBrush(Qt::green));
}
else if (opt.text == "50")
{
QFont f(opt.font);
f.setBold(true);
p.setPen(Qt::red);
p.drawText(opt.rect,opt.text);
}
else if (opt.index.row()%2 == 0)
{
p.fillRect(opt.rect,QBrush(Qt::lightGray));
}
else QTableWidget::paintEvent(event);
// style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this);
}
Как сделать описанные мной выше действия в paintEvent'е? Надоело разбираться. Help me!