Seite 1 von 1

Icons rechtsbündig im QTreeView

Verfasst: 17. Januar 2011 14:24
von PLuS
Hi zusammen,

ich habe ein Model gemacht, das zwei Spalten anzeigt.
In der ersten Spalte wird Text und ein Icon angezeigt.
In der zweiten Spalte würde ich gerne mehrere Icons nebeneinander anzeigen.

Für den Zweck habe ich ein eigenes Delegate gemacht, das vom Model eine Liste von Icons bekommt, das es nebeneinander zeichnet.

Das ganze funktioniert auch alles, jedoch hätte ich gerne, dass die Icons (der zweiten Spalte) rechtsbündig ausgerichtet werden (im Moment sind sie linksbündig direkt neben dem Text der 1. Spalte).

Hier eine leicht gekürzte Version meiner Paint-Methode:

Code: Alles auswählen

void multiicondelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
  if (!index.isValid()) {
    QStyledItemDelegate::paint(painter, option, index);
    return;
  }

  if (index.column() == 0) {
    QStyledItemDelegate::paint(painter, option, index);
    return;
  }

  viewitem* item = static_cast<viewitem*>(index.internalPointer());
  if (!item) {
    QStyledItemDelegate::paint(painter, option, index);
    return;
  }

  int nextx = 0;
  int icosize = item->iconSize();
  QList<QIcon> icolist = item->icons();

  for (int i = 0; i < icolist.count(); ++i) {
    icolist.at(i).paint(painter, option.rect.x() + nextx, option.rect.y(), icosize, icosize);
    nextx += icosize;
  }
}
Kann mich da jemand in die richtige Richtung schubsen?

Vielen Dank!

Verfasst: 27. Januar 2011 02:31
von PLuS
Mir ist eingefallen, dass ich natürlich mal einen Screenshot machen könnte ;-)

Im Attachment seht ihr also, wie ich es machen möchte (Screenshot vom TeamSpeak 3 Client).

Dort scheint das ganze in einer Spalte zu sein.
Das werde ich nochmal ausprobieren. Dafür muss ich nur die Breite des Trees und die "Einrückungsstufe" des jeweiligen Items wissen, damit ich sizeHint auch korrekte Werte zurückliefern lassen kann.

Verfasst: 27. Januar 2011 09:09
von upsala
Im Prinzip ist die Position doch option.rect.right()-nextx

Verfasst: 27. Januar 2011 15:13
von PLuS
Manchmal kann es so einfach sein :lol:

Vielen Dank!


Ich war davon ausgegangen, dass das Rect die Größe von sizeHint des jeweiligen Items hat. Werde mir die Doku wohl nochmal richtig durchlesen.