Problem mit slots

Alles rund um die Programmierung mit Qt
Antworten
Efchen
Beiträge: 2
Registriert: 31. Mai 2007 08:27

Problem mit slots

Beitrag 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
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag 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.
Efchen
Beiträge: 2
Registriert: 31. Mai 2007 08:27

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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 :-)
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag 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.
Antworten