Seite 1 von 1

Problem mit slots

Verfasst: 31. Mai 2007 08:50
von Efchen
Hallo.

Ich bin prinzipiell wohl Anfänger, was Qt und C++ angeht.
Ich habe ein Programm geschrieben, das mir auf der ersten Seite ein Menü mit mehreren Buttons darstellt. Die Buttons sollen mit einem eigenen Slot verknüpft werden, dann soll der bisherige Bildschirm gelöscht und ein neuer angezeigt werden.

Die erste Seite ist eine QVBox. Nach Aufruf des Slots (der übrigens funktioniert), lösche ich diese QVBox mit delete. Auch das geht, der Fensterinhalt wird gelöscht. Dann versuche ich eine neue QVBox anzulegen, um darin wieder andere Inhalte auszugeben. Aber das funktioniert nicht mehr, obwohl das im Konstruktor schonmal genauso mit Erfolg gemacht wurde.

So wird mein Slot erfolgreich aufgerufen:

Code: Alles auswählen

QObject::connect(pBoxLogo, SIGNAL(clicked()), this, SLOT(createEditPage()));
Und das ist der Slot-Code. Der Aufruf klappt, das delete führt dazu, dass der bisherige Fensterinhalt gelöscht wird, danach passiert nichts sichtbares mehr. Ist an der Stelle this noch mein Editor-Objekt?

Code: Alles auswählen

void Editor::createEditPage()
{
    delete pMainPage;

    pEditPage=new QVBox(this);

    QLabel *pText = new QLabel(pEditPage);
    pText->setText("Dieser Text wird nicht angezeigt.");
    pText->setFont(QFont("URW Chancery L", 30, QFont::Bold)); 
    pText->setAlignment(AlignHCenter | AlignVCenter);
}
Ist meine Vorgehensweise überhaupt annähernd normal für C++/Qt? Den Fensterinhalt in ein Objekt packen, um dieses dann bei Wechsel der Seite einfach zu löschen, um danach ein neues Objekt mit Elementen zur Darstellung zu erzeugen?

Bei nicht-OO Programmiersprachen löscht man ja einfach den Bildschirm und schreibt aufs neue los. Oder ist es üblich, für die nächste Bildschirmseite ein eigenes Objekt anzulegen?

Über Hilfe würde ich mich freuen!
-Efchen

Verfasst: 1. Juni 2007 11:44
von Zandru
Was für eine Version benutzt du? Qt Version 3 ist veraltet, wenn du gerade anfängst, würde ich dir sehr ans Herz legen auf die Version 4.2.x oder 4.3.0 umzusteigen. Falls du schon die Version 4 benutzt - die QVBox ist nur als Qt3Support Klasse noch drin, und sollte nicht mehr benutzt werden.

Ansonsten schau dir mal QStackedWidget (Qt4) an - da kannst du alle Seiten einbetten und dann vor und zurück blättern.

als Anfänger würde ich den Designer benutzen, um Widgets zu bauen, du kannst dir dann den C++-Code anschauen, den uic erzeugt, und hast dann wenn du es unbedingt "von Hand" machen willst ein funktionierendes Beispiel.

Verfasst: 1. Juni 2007 12:02
von Efchen
Was für eine Version benutzt du?
Version 3, kommerziell, ich habe also keine Umstiegsmöglichkeit.
Ansonsten schau dir mal QStackedWidget (Qt4) an - da kannst du alle Seiten einbetten und dann vor und zurück blättern.
Sowas gibts dann wohl nicht in Qt3?
als Anfänger würde ich den Designer benutzen, um Widgets zu bauen, du kannst dir dann den C++-Code anschauen, den uic erzeugt, und hast dann wenn du es unbedingt "von Hand" machen willst ein funktionierendes Beispiel.
Was ist für einen erfahrenen C-Programmierer, der es nicht so mit grafischen Benutzeroberflächen hat, letztlich einfacher? Gleich den Code schreiben zu lernen oder sich in den Designer einzuarbeiten? Ich schreibe auch HTML-Code selber und käme mit einem WYSIWYG-Editor nicht wirklich zurecht :-)

Danke erstmal für Deine Tipps,
-Efchen

Verfasst: 1. Juni 2007 12:10
von macman
Efchen hat geschrieben:Sowas gibts dann wohl nicht in Qt3?
QWidgetStack
Efchen hat geschrieben:Was ist für einen erfahrenen C-Programmierer, der es nicht so mit grafischen Benutzeroberflächen hat, letztlich einfacher? Gleich den Code schreiben zu lernen oder sich in den Designer einzuarbeiten? Ich schreibe auch HTML-Code selber und käme mit einem WYSIWYG-Editor nicht wirklich zurecht :-)
Dann viel Spaß bei verschachtelten Layouts :-)

Verfasst: 1. Juni 2007 12:11
von Zandru
wenn du "Version 3, kommerziell" hast, dann kannst du denke ich mit deinen login-daten auch ohne Aufpreis die "Version 4, kommerziell" runterladen.
Es sei denn natürlich du hast keinen Supportvertrag mehr und die Login-Daten sind nicht mehr gültig.

Gerade wenn du als erfahrener C-Programmierer es "nicht so mit GUI" hast, wird es für dich einfacher sein, mit dem Designer Dialoge bzw. Editor-Seiten zu erstellen.

Wenn du keine Erfahrung mit GUI-Programmierung hast, würde ich davon abraten, die Editorseiten "händisch" zusammenzubasteln - die Qt verwendet eine "moderne" Event-Loop und Signal/Slots.