[gelöst] Elemente in Widget werden nicht angezeigt
[gelöst] Elemente in Widget werden nicht angezeigt
Hi,
das ist hier mein erster Beitrag, ich hoffe mal, daß ich nicht zuviel verkehrt mache.
Zu meinem Problem:
Ich habe einen QDialog, von dem leite ich eine weitere Klasse ab. In der abgeleiteten Klasse möchte ich gerne weitere Elemente dem Dialog hinzufügen.
Also definiere ich in der Basisklasse ein Widget, in das ich die Grafik-Elemente aus der abgeleiteten Klasse packe, und setze in der Header-Datei die UI auf public.
In der abgeleiteten Klasse definiere ich zuerste die zusätzlichen grafischen Elemente mit dem Platzhalter-Widget aus der Basisklasse. Dann noch ein Layout und da packe ich die Elemente rein.
Dann zeige ich das ganze mit show() an.
Wenn ich mir das Ganze dann anzeigen lassen möchte, ist das Widget leer, die Elemente werden nicht angezeigt.
Die Qt-Version ist 4.3.3.
Hat jemand eine Idee, woran es liegen könnte?
Digit
das ist hier mein erster Beitrag, ich hoffe mal, daß ich nicht zuviel verkehrt mache.
Zu meinem Problem:
Ich habe einen QDialog, von dem leite ich eine weitere Klasse ab. In der abgeleiteten Klasse möchte ich gerne weitere Elemente dem Dialog hinzufügen.
Also definiere ich in der Basisklasse ein Widget, in das ich die Grafik-Elemente aus der abgeleiteten Klasse packe, und setze in der Header-Datei die UI auf public.
In der abgeleiteten Klasse definiere ich zuerste die zusätzlichen grafischen Elemente mit dem Platzhalter-Widget aus der Basisklasse. Dann noch ein Layout und da packe ich die Elemente rein.
Dann zeige ich das ganze mit show() an.
Wenn ich mir das Ganze dann anzeigen lassen möchte, ist das Widget leer, die Elemente werden nicht angezeigt.
Die Qt-Version ist 4.3.3.
Hat jemand eine Idee, woran es liegen könnte?
Digit
Zuletzt geändert von Digit am 11. März 2008 11:40, insgesamt 1-mal geändert.
vielleicht fehlt noch das layout dem widget hizuzufügen
Code: Alles auswählen
Widget::Widget {
...
mainLalylout = new QHboxLayout;
mainLalylout->addLayout(layer1);
mainLalylout->addLayout(layer2);
setLayout(mainLayout);
}
... Widget w = Widget;
w.show();
Nein, das habe ich schon versucht, also so ziemlich genau wie es bei den Layouts im Assistant beschrieben ist.
Der Konstruktor der abgeleiteten Klasse sieht so aus:
Digit
Der Konstruktor der abgeleiteten Klasse sieht so aus:
Code: Alles auswählen
ChildClass::ChildClass( QWidget *parent )
: BaseDlg( parent )
{
//add a label with the text "Tests" to the widget in the baseclass,
//which is a placeholder for more graphic items
QLabel *testLabel = new QLabel ( tr( "Tests" ), ui.wdgPlaceholder );
QLabel *testLabel2 = new QLabel ( tr( "Test2" ), ui.wdgPlaceholder );
QVBoxLayout *vbox = new QVBoxLayout();
vbox->addWidget( testLabel );
vbox->addWidget( testLabel2 );
ui.wdgPlaceholder->setLayout( vbox );
ui.wdgPlaceholder->show();
}Nur so als Frage:
Warum leitest du eine Klasse von QDialog ab, diese dann nochmal um Elemente hinzuzufügen, um dann im Konstruktor ein einziges Widget aus dem bereits in BaseDlg enthaltenen UI anzuzeigen (show())? Vllt. meintest du ja nur setVisible(true)?
Schenk dir mal das show() und erstelle dir ein ChildClass-Dialog, welchen du dann mit show() oder exec() anzeigst.
Grüße
Franz
Warum leitest du eine Klasse von QDialog ab, diese dann nochmal um Elemente hinzuzufügen, um dann im Konstruktor ein einziges Widget aus dem bereits in BaseDlg enthaltenen UI anzuzeigen (show())? Vllt. meintest du ja nur setVisible(true)?
Schenk dir mal das show() und erstelle dir ein ChildClass-Dialog, welchen du dann mit show() oder exec() anzeigst.
Grüße
Franz
Ich glaube, da liegt ein kleines Mißverständnis vor.
Der Hintergrund ist der, daß ich ein gutes Dutzend Dialoge habe, die alle gleich aufgebaut sind.
Die Gemeinsamkeiten hab ich in die Basisklasse gepackt und die Unterschiede der einzelnen sollten jeweils in den abgeleiteten Kind-Klassen hinzukommen. Da ist mal eine ComboBox mehr, mal ist da eine Checkbox. Deswegen eine Klasse, die von QDialog ableitet und von der wiederum mehrere Klassen ableiten. Das Codeschnipsel oben war nur ein vereinfachter Test ohne das ganze andere was da dran hängt.
Digit
Der Hintergrund ist der, daß ich ein gutes Dutzend Dialoge habe, die alle gleich aufgebaut sind.
Die Gemeinsamkeiten hab ich in die Basisklasse gepackt und die Unterschiede der einzelnen sollten jeweils in den abgeleiteten Kind-Klassen hinzukommen. Da ist mal eine ComboBox mehr, mal ist da eine Checkbox. Deswegen eine Klasse, die von QDialog ableitet und von der wiederum mehrere Klassen ableiten. Das Codeschnipsel oben war nur ein vereinfachter Test ohne das ganze andere was da dran hängt.
Digit
Du hast den letzten Teil des Satzes nicht durchgelesen 
Du solltest nicht ein Widget in einem QDialog (den aus deinem .ui) versuchen mit show() anzuzeigen! Da bringt dir der ganze Dialog nichts...
Einen Dialog zeigt man immer als Ganzes an, entweder mit exec() (was dann einen Wert wie QDialog::Accepted o.Ä. zurückgibt) oder mittels (dem von QWidget geerbten) show().
Wenn du im BaseDlg das Platzhalterwidget auf visible=false gesetzt hast (also versteckt) dann setz einfach setVisible(true), aber nicht show() (falls das deine Absicht war).
Hoffe das war jetzt klarer.
Wäre trotzdem gut wenn du hier etwas mehr Code posten könntest, der funktioniert und dein Problem zeigt.
Grüße
Franz
Du solltest nicht ein Widget in einem QDialog (den aus deinem .ui) versuchen mit show() anzuzeigen! Da bringt dir der ganze Dialog nichts...
Einen Dialog zeigt man immer als Ganzes an, entweder mit exec() (was dann einen Wert wie QDialog::Accepted o.Ä. zurückgibt) oder mittels (dem von QWidget geerbten) show().
Wenn du im BaseDlg das Platzhalterwidget auf visible=false gesetzt hast (also versteckt) dann setz einfach setVisible(true), aber nicht show() (falls das deine Absicht war).
Hoffe das war jetzt klarer.
Wäre trotzdem gut wenn du hier etwas mehr Code posten könntest, der funktioniert und dein Problem zeigt.
Grüße
Franz