QTextEdit um Buttons erweitern

Alles rund um die Programmierung mit Qt
Antworten
d4eRc
Beiträge: 13
Registriert: 6. August 2010 16:54

QTextEdit um Buttons erweitern

Beitrag von d4eRc »

Hallo zusammen,

ich möchte die QTextEdit-Klasse erweitern, indem ich Buttons für Fett/Kursiv/Unterstreichen-Formatierung hinzufüge. Bis jetzt ist das draus geworden:

Code: Alles auswählen

class message_field : public QTextEdit {
Q_OBJECT
  public:
    message_field(QWidget *parent = 0);
    QPushButton *bold_button;
    QPushButton *italic_button;
    QPushButton *underline_button;
};

message_field::message_field(QWidget *parent)
{
bold_button = new QPushButton(this);
bold_button->setIcon(QIcon::fromTheme("format-text-bold"));
italic_button = new QPushButton(this);
italic_button->setIcon(QIcon::fromTheme("format-text-italic"));
underline_button = new QPushButton(this);
underline_button->setIcon(QIcon::fromTheme("format-text-underline"));

QVBoxLayout *buttons = new QVBoxLayout;
buttons->addWidget(bold_button);
buttons->addWidget(italic_button);
buttons->addWidget(underline_button);
}
Jetzt möchte ich nur noch das buttons-Layout neben dem "Hauptbestandteil" des QTextEdit platzieren. Ich kann ja schlecht ein Haupt-Layout definieren und layout->addWidget(this); benutzen, das macht ja keinen Sinn.
Gibt es eine möglichkeit, wie ich auf das eigentliche Textfeld des QTextEdit zugreifen kann, oder muss ich eine neue QWidget-Klasse erstellen, die intern ein QTextEdit instanziert und dazu die Buttons bastelt?

Grüße
khrl01
Beiträge: 28
Registriert: 28. August 2007 13:06

Beitrag von khrl01 »

class message_field : public QTextEdit
Gibt es eine möglichkeit, wie ich auf das eigentliche Textfeld des QTextEdit zugreifen kann, oder muss ich eine neue QWidget-Klasse erstellen, die intern ein QTextEdit instanziert und dazu die Buttons bastelt?
Du hast ja ein Object abgeleitet von QTextEdit. Um auf das Textfeld zuzugreifen musst Du nur auf this zugreifen...

grüsse
karl-heinz
d4eRc
Beiträge: 13
Registriert: 6. August 2010 16:54

Beitrag von d4eRc »

Soweit war ich ja auch, nur ist es ja nicht möglich, das aktuelle haupt-widget zu einem layout hinzuzufügen, das "widget-intern" ist. Falls man

Code: Alles auswählen

layout->addWidget(this);
probiert, endet das in einer Endlosschleife. Ich bräuchte also einen Weg, wie ich auf den "weißen Rahmen" des QTextEdits zugreifen kann, ohne dass ich gleich das gesamte Widget ansprechen muss. Natürlich bin ich auch für andere Vorschläge (als Layouts) offen, ich möchte nur irgendwie ein QTextEdit bekommen, das intern gleich die Funktionalität für Fett/Kursiv etc.-Buttons hat, ohne dass ich eine extra Klasse schreiben muss, die von QTextEdit jedoch nicht abgeleitet ist.

Grüße
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Nur von QWidget ableiten und dein TextEdit als Member. Dann kannst du dein TextEdit in ein Layout packen und dieses dem "this" verpassen.
d4eRc
Beiträge: 13
Registriert: 6. August 2010 16:54

Beitrag von d4eRc »

Dann stehen mir die Funktionen von QTextEdit nicht mehr in der Klasse zu verfügung, d.h. von außerhalb müsse ich dann auf bspw:

Code: Alles auswählen

message_field->textedit->text()
zugreifen, vorrausgesetzt das textedit an sich ist "public". Eine andere Möglichkeit gibt es nicht, sehe ich das richtig? Das "perfekte" Ergebnis wäre eine Klasse, die die komplette funktionalität von QTextEdit aufweißt und um die Buttons nur erweitert wäre.

Schonmal ein Danke!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du kannst doch auch nur ein Widget schreiben, das die Knöpfe enthält, und dann beim/nach dem Erstellen ein QTextEdit zuweisen, das bearbeitet werden soll? Oder greifst du in deiner Klasse auf protected Attribute von QTextEdit zu? Irgend welche Events?
d4eRc
Beiträge: 13
Registriert: 6. August 2010 16:54

Beitrag von d4eRc »

Das ist eine gute Idee. Ich würde also ein Button-Widget schreiben, dem ich einen Pointer auf das QTextEdit übergebe - in diesem Widget kann ich dann automatisch die QTextEdit-Methoden setFontItalic etc. verwenden. Ansonsten brauche ich nichts vom QTextEdit.

Danke für die Hilfe, ich probier das gleich mal aus!
Antworten