Richtext für QTreeWidget

Alles rund um die Programmierung mit Qt
Antworten
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Richtext für QTreeWidget

Beitrag 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?
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Richtext für QTreeWidget

Beitrag 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
BenCFD
Beiträge: 1
Registriert: 26. November 2009 17:06

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