Hallo,
ich habe ein Problem, für dessen Lösung mir im Moment eine Idee fehlt: Ein TreeModel, stellt die Daten ungefähr so dar:
Überschrift 1
|
---- Satz 1
|
---- Satz 2
Überschrift 2
|
--- Satz 1
|
--- Satz 2
Nun soll in der Überschrift jeweils der erste Buchstabe ( und nur der ) unterstrichen dargestellt werden. Für einen Lösungshinweis wäre ich dankbar.
Vielen Dank und viele Grüße
Michael
[gelöst] Textformatierung im TreeModel
[gelöst] Textformatierung im TreeModel
Zuletzt geändert von MichaelS am 28. Januar 2014 12:46, insgesamt 1-mal geändert.
Re: Textformatierung im TreeModel
Die Lösung nennt sich Delegate z.B. QStyledItemDelegate. Lies die mal die Doku dazu durch.
Gruß Sig
Gruß Sig
Re: Textformatierung im TreeModel
Hallo,
vielen Dank für den Hinweis. Zwischenzeitlich hatte ich das Problem gelöst, in dem ich die Paint-Methode von QItemDelegate überschrieben habe. Dabei wird bei den Überschriften HTML-Code gerendert und bei allen anderen wird die Standard-Paint-Methode aufgerufen. Damit kann ich im Datenmodel bei den Überschriften HTML-Tags einfügen, um bestimmte Buchstaben zu unterstreichen, die dann im Treeview auch korrekt dargestellt werden.
vielen Dank für den Hinweis. Zwischenzeitlich hatte ich das Problem gelöst, in dem ich die Paint-Methode von QItemDelegate überschrieben habe. Dabei wird bei den Überschriften HTML-Code gerendert und bei allen anderen wird die Standard-Paint-Methode aufgerufen. Damit kann ich im Datenmodel bei den Überschriften HTML-Tags einfügen, um bestimmte Buchstaben zu unterstreichen, die dann im Treeview auch korrekt dargestellt werden.
Code: Alles auswählen
void myDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if ( !index.parent().isValid() )
{
QLabel *label = new QLabel;
label->setText(index.data().toString());
label->setTextFormat(Qt::RichText);
label->setGeometry(option.rect);
label->setStyleSheet("QLabel { background-color : transparent; }");
painter->translate(option.rect.topLeft());
label->render(painter);
painter->translate(-option.rect.topLeft());
} else
QItemDelegate::paint( painter,option,index );
}