Seite 1 von 1

Richtext für QTreeWidget

Verfasst: 9. Juli 2009 11:20
von pfid
Hallöchen,

ich möchte ein QTreeWidget dazu bringen, html-formatierten Text anzuzeigen. Dazu habe ich ein Itemdelegate erstellt, was in der Lage ist Richtext zu rendern:

Code: Alles auswählen

class RichDelegate : public QItemDelegate
{
   public:
 
      void paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
      {
          painter->save();
          QTextDocument doc;
          doc.setHtml( index.data().toString() );
          QAbstractTextDocumentLayout::PaintContext context;
          doc.setPageSize( option.rect.size());
          painter->setClipRect( option.rect );
          painter->translate(option.rect.x(), option.rect.y());
          doc.documentLayout()->draw(painter, context);
          painter->restore();
      }
};
Leider funktioniert das Delegate nicht mit dem QTreeWidget. Wenn ich es einer Spalte zuweise und das Widget mit Inhalt fülle, bleibt die Spalte komplett leer.

Testweise hab ichs auch mit einem QTableView Widget versucht, da funktioniert es tadellos und zeigt html-formatierten Text an. In einem QTreeView Widget funktionierts wiederrum nicht.

Was mach ich falsch?

Re: Richtext für QTreeWidget

Verfasst: 9. Juli 2009 17:29
von neuschi
pfid hat geschrieben: Leider funktioniert das Delegate nicht mit dem QTreeWidget. Wenn ich es einer Spalte zuweise und das Widget mit Inhalt fülle, bleibt die Spalte komplett leer.
Das Problem scheint beim Clip-Rectangle zu sein: wenn Du das Statement

Code: Alles auswählen

 painter->setClipRect( option.rect );
auskommentierst siehst du auch im Tree etwas, allerdings mit unschönen Effekten beim MouseOver und beim Scrollen.

Das Rechteck scheint also nicht ganz zu passen.

\Ralf

Verfasst: 26. November 2009 17:48
von BenCFD
Hallo zusammen,

ich habe genau das gleiche Problem. Die von Ralf vorgeschlagene Methode, den Aufruf von setClipRect auszukommentieren, fuehrt tatsaechlich dazu, dass etwas angezeigt wird. Allerdings an der falschen Stelle. Naemlich genau um einen Eintrag nach unten versetzt. Das heisst der Text von Item 1 steht dann an der Stelle von Item 2, der von Item 2 an der Stelle von Item 3 etc.
Ich habe schon verschiedenste Dinge ausprobiert, konnte aber keine Erklaerung dafuer finden, weshalb das so ist. Konntet Ihr irgendwelche Loesungen finden?

Das interessante ist: Das Problem tritt nur auf einem Windows 64 Bit-Laptop auf. Auf den 32 Bit-Maschinen klappt alles problemlos ... !?!

Vielen Dank und viele Gruesse,

Ben