Seite 1 von 1

QItemDelegate und QpushButton sowie RichText

Verfasst: 3. Mai 2007 15:08
von eht16
Hi,

ich bin noch relativ neu in QT. Ich möchte in einem QTableWidget in einer Spalte RichText darstellen(also damit HTML-Code geht) und in einer anderen Spalte möchte ich gerne einen QPushButton haben(weniger wichtig).

Allerdings hab ich keine so richtige Idee wie das anstelle. Bis jetzt habe ich ein Delegate erstellt und ich denke ich muss nur die paint- und sizeHint-Methoden überschreiben.
Für die sizeHint-Methode hab ich überhaupt keine Idee. Meine aktuelle paint-Methode schaut bisher so aus:

Code: Alles auswählen

void RichTextDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
	if (index.column() == 0)
	{
		QVariant value = index.data(Qt::DisplayRole);
		QTextDocument *doc = new QTextDocument();
		doc->setHtml(value.toString());
		doc->drawContents(painter, option.rect);
	}
	else
		QItemDelegate::paint(painter, option, index);
}
Dann wird zwar die erste Zelle(Zeile 0, Spalte 0) in RichText dargestellt, aber die anderen Zeilen(jeweils Spalte 0) sind leer oder nicht sichtbar.

Ich vermute mein Problem liegt bei option.rect.
Hat jemand eine Idee?

Gruß,
eht16

Verfasst: 3. Mai 2007 15:39
von upsala
1. http://qtforum.de/forum/viewtopic.php?t=4076

2. Soll der QPushButton immer dargestellt werden oder nur wenn der Eintrag akiv ist?

Verfasst: 3. Mai 2007 19:01
von eht16
Danke soweit. Ich hätte erwähnen sollen, dass ich den Post bereits gelesen habe(sorry) und daraus ja auch meine aktuelle paint-Methode entstand, allerdings hört der Thread auch an meinem Problem auf.
upsala hat geschrieben: 2. Soll der QPushButton immer dargestellt werden oder nur wenn der Eintrag akiv ist?
Mit Eintrag aktiv meinst Du, ob die Zeile markiert ist(in meinem QTableWidget kann man nur ganze Zeilen markieren)?
Das ist gar nich so wichtig, ich würde es bevorzugen wenn er immer dargestellt wird, allerdings kann ich da durchaus die einfachere Implementierung bevorzugen ;-).

Gruß
eht16

Verfasst: 3. Mai 2007 19:24
von upsala
1. Der Rest steht in der Doku...

2. Du hast zwei Möglichkeiten, entweder mit QStyle::drawControl einen Button zeichnen, oder einen Text/Image darstellen und wenn der Eintrag Aktiv ist als Widget eben einen QPushButton verwenden (So ähnlich wie hier).

Verfasst: 3. Mai 2007 19:32
von eht16
upsala hat geschrieben:1. Der Rest steht in der Doku...
Sicherlich, die Frage ist nur wo ;-). Hast Du nen Tipp? Ich weiß ja, Du bist nicht der Typ, der einem ne fertige Lösung vorsetzt und das ist auch gut so, wir wollen ja alle was lernen. Aber bißchen nen kleiner Wink mit ner halben Zaunslatte wäre cool ;-).
upsala hat geschrieben:2. Du hast zwei Möglichkeiten, entweder mit QStyle::drawControl einen Button zeichnen, oder einen Text/Image darstellen und wenn der Eintrag Aktiv ist als Widget eben einen QPushButton verwenden (So ähnlich wie hier).
Danke Dir. Da werd ich ma basteln.

Verfasst: 5. Mai 2007 17:45
von eht16
Also meinen PushButton hab ich mittlerweile mit drawControl gemalt. Danke für den Tipp.

Aber bezüglich des RichText-Problems bin ich immer noch nicht weiter. Hat keiner ne Idee?

Verfasst: 5. Mai 2007 18:50
von upsala
Hier gibts die Lösung fix und fertig zum abschreiben...

Verfasst: 6. Mai 2007 14:05
von eht16
Vielen Dank, das is super.