Probleme mit dem eigenen QItemDelegate
Verfasst: 6. März 2009 10:01
Hallo alle zusammen,
ich habe für eine TableView ein eigenes Model geschrieben und eine eigenes Delegate. Nun hab ich zwei Fragen zur paint methode:
Ok also: Ich zeichne eine CheckBox für einen Bool-Wert. Nun die Fragen:
1. Wie kann ich das Ding am elegantesten zentrieren?
2. Mit frage ich ab ob die Zeile selektiert ist und wenn ja, dann highlighte ich den Hintergrund. Jetzt gibt es aber noch eine Unschönheit: Wenn die Zeile ausgewählt is, die Tabelle aber nicht den Fokus hat, dann erhält die Zeile standardmäßig dunkelgraue Unterlegung, ist also im Zustand "selektiert, aber nicht fokussiert". WIe kann ich das richtig zeichnen? Im Moment ist der Rest der Zeile nämlich dunkelgrau und meine eine Checkbox-Tabellenzelle dunkelblau (highlighted) und das sieht scheisse aus.
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:
Hab aber keine Ahnung wie ich das machen soll.
Bin kein Qt-Newbie, aber im manuellen Zeichnen von Widgets hab ich keine Erfahrung.Danke für jede Antwort!
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!