[gelöst]Darstellung von Widgets: für Anfänger
Verfasst: 4. November 2007 23:55
hallo,
vor einiger Zeit hatte ich ein typisches Anfänger-Problem, wofür ich hier die Lösung habe. Vielleicht hilft das anderen Anfängern.
Problem:
Zur Darstellung des Inhalts von Textdateien hatte ich ein Widget mit Qt-Designer erzeugt, das QTextEdit, einen Button und eine checkbox enthielt, mit Namen Ui::TextView.
Zur Implementierung der nötigen Funktionalität deklarierte ich eine neue Klasse TextViewer mit doppelter Vererbung von den Klassen QWidget und Ui::TextView:
class TextViewer : public QWidget, public Ui::TextView
Die Darstellung dieses Widgets zeigte jedoch nur die QTextEdit-box, den Button und die Checkbox ohne den umgebenden Rahmen. Das Widget funktionierte, konnte aber wegen des fehlenden Rahmens nicht bewegt werden.
Lösung:
Dopelte Vererbung von QDialog und Ui::TextView anstatt von QWidget und Ui::TextView:
class TextViewer : public QDialog, public Ui::TextView
Ein weiterer Tipp:
Der Unterschied zwischen der Generierung dieses Widgets innerhalb des main-window durch
und
ist folgender:
In der ersten Version ist das Widget unabhängig vom main-window. Dies bedeutet, dass es zwar erzeugt wird, aber hinter dem main-window zu liegen kommt und deshalb nicht sichtbar ist. Um es zu sehen, muss man das main-window verschieben.
In der zweiten Version ist das Widget stets vor dem main-window sichtbar, weil es ihm gehört, was sicherlich praktischer ist.
Nikosch
vor einiger Zeit hatte ich ein typisches Anfänger-Problem, wofür ich hier die Lösung habe. Vielleicht hilft das anderen Anfängern.
Problem:
Zur Darstellung des Inhalts von Textdateien hatte ich ein Widget mit Qt-Designer erzeugt, das QTextEdit, einen Button und eine checkbox enthielt, mit Namen Ui::TextView.
Zur Implementierung der nötigen Funktionalität deklarierte ich eine neue Klasse TextViewer mit doppelter Vererbung von den Klassen QWidget und Ui::TextView:
class TextViewer : public QWidget, public Ui::TextView
Die Darstellung dieses Widgets zeigte jedoch nur die QTextEdit-box, den Button und die Checkbox ohne den umgebenden Rahmen. Das Widget funktionierte, konnte aber wegen des fehlenden Rahmens nicht bewegt werden.
Lösung:
Dopelte Vererbung von QDialog und Ui::TextView anstatt von QWidget und Ui::TextView:
class TextViewer : public QDialog, public Ui::TextView
Ein weiterer Tipp:
Der Unterschied zwischen der Generierung dieses Widgets innerhalb des main-window durch
Code: Alles auswählen
TextViewer *viewFile;
viewFile = new TextViewer;
Code: Alles auswählen
TextViewer *viewFile;
viewFile = new TextViewer(this);
In der ersten Version ist das Widget unabhängig vom main-window. Dies bedeutet, dass es zwar erzeugt wird, aber hinter dem main-window zu liegen kommt und deshalb nicht sichtbar ist. Um es zu sehen, muss man das main-window verschieben.
In der zweiten Version ist das Widget stets vor dem main-window sichtbar, weil es ihm gehört, was sicherlich praktischer ist.
Nikosch