[gelöst] Textformatierung im TreeModel

Alles rund um die Programmierung mit Qt
Antworten
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

[gelöst] Textformatierung im TreeModel

Beitrag von MichaelS »

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
Zuletzt geändert von MichaelS am 28. Januar 2014 12:46, insgesamt 1-mal geändert.
sigvdr
Beiträge: 100
Registriert: 1. Juli 2008 19:29

Re: Textformatierung im TreeModel

Beitrag von sigvdr »

Die Lösung nennt sich Delegate z.B. QStyledItemDelegate. Lies die mal die Doku dazu durch.
Gruß Sig
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: Textformatierung im TreeModel

Beitrag von MichaelS »

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.

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 );
}
Antworten