Icons rechtsbündig im QTreeView

Alles rund um die Programmierung mit Qt
Antworten
PLuS
Beiträge: 5
Registriert: 25. Juni 2006 23:18
Wohnort: Dortmund

Icons rechtsbündig im QTreeView

Beitrag 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!
PLuS
Beiträge: 5
Registriert: 25. Juni 2006 23:18
Wohnort: Dortmund

Beitrag 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.
Dateianhänge
Bildschirmfoto.png
Bildschirmfoto.png (34.59 KiB) 2057 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Im Prinzip ist die Position doch option.rect.right()-nextx
PLuS
Beiträge: 5
Registriert: 25. Juni 2006 23:18
Wohnort: Dortmund

Beitrag 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.
Antworten