Frage

Ich habe eine QTreeView Unterklasse (und QAbstractItemModel Unterklasse), die einen schönen horizontalen Header hat. Ich möchte vertikalen Header hinzufügen (in Richtung der linken Seite nach unten) zu entsprechen. Aber im Gegensatz zu QTableView, die vertikal getrennt hat ( setVerticalHeader() ) und horizontale Header ( setHorizontalHeader() ) ermöglicht QTreeView nur einen einzigen Header ( setHeader() ).

Ich weiß, dass ich nur so tun, dass die linke Spalte ist der Header und macht es mit einer anderen Hintergrundfarbe (Ich brauche nicht die Möglichkeit, die Zeilen, um die Größe oder neu anordnen, so würde ich nicht von implementieren diese besonderen Verhaltensweisen). Aber das heißt nicht berücksichtigt lokale Stile. Zum Beispiel auf meinem System der Header mit einem leichten Gefälle, so dass sie einen fast 3D-Look.

Ich bin daher der Suche nach entweder eine Möglichkeit, einen geeigneten vertikalen Header hinzuzufügen (ich vermute, es wäre eine Unterklasse von QHeaderView sein) oder aber einen Header auf der linken Spalte Rendering, aber es ist der richtige Weg zu machen.

War es hilfreich?

Lösung

Ihr wahrscheinlich richtig, dass Sie auf „vortäuschen“ haben wird, aber Sie sollten es zeichnen können, so gut aussehen wie Ihre horizontale Header.

Was Sie brauchen, ist verantwortlich für die paintEvent für diese Zellen sein zu tun und verwenden dann den aktuellen Stil ein benutzerdefiniertes Steuerelement zu zeichnen. So etwas wie:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

Der einfachste Weg für die Zellen verantwortlich für ein Paint-Ereignis sein, würden Sie wollen ein eigenes Element Delegierten zu schaffen und die virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0 Methode neu implementieren. Sie haben soeben Ihre Gate-Malerei auf die Indizes um dich kümmern und den Rest der Superklasse übergeben (Qt-Dokumentation für diese Klasse sehen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top