ich habe für eine TableView ein eigenes Model geschrieben und eine eigenes Delegate. Nun hab ich zwei Fragen zur paint methode:
Code: Alles auswählen
void DataDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option
, const QModelIndex &index) const
{
// show a check box for visibility column
if(index.column() == m_VisibilityColumnIndex)
{
//Get item data
bool visibility = index.data(Qt::UserRole).toBool();
painter->save();
// draw item data as CheckBox
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());
const QStyle *style = QApplication::style();
QStyleOptionButton opt;
opt.state |= visibility ? QStyle::State_On : QStyle::State_Off;
opt.state |= QStyle::State_Enabled;
opt.rect = option.rect;
// draw item data as CheckBox
style->drawControl(QStyle::CE_CheckBox,&opt,painter);
painter->restore();
}
// for everything else paint the usual way
else
{
QItemDelegate::paint(painter, option, index);
}
}
1. Wie kann ich das Ding am elegantesten zentrieren?
2. Mit
Code: Alles auswählen
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());Zur 3. und letzten Frage: Ich muss natürlich den Editor, den ich dann zeichne auch zentrieren. Das muss irgendwie gehen in der updateEditorGeometry()-Methode:
Code: Alles auswählen
void DataDelegate::updateEditorGeometry( QWidget * editor, const QStyleOptionViewItem option, const QModelIndex & index ) const
{
editor->setGeometry(opt.rect);
}
Bin kein Qt-Newbie, aber im manuellen Zeichnen von Widgets hab ich keine Erfahrung.Danke für jede Antwort!