Qt Creator LayOuts von Fenstern
-
Hi,
ich habe ein Problem mit dem Qt Creator und zwar kann man in diesem ja das Aussehen des Hauptfensters "zusammenklicken". Wenn ich jetzt aber im Hauptfenster auf einen Button klicke, will ich, dass ein neues Fenster erscheint(soweit kriege ich das auch noch hin) und ich auch dieses Fenster "zusammenklicken" kann, ohne das eigentlich Aussehen in Code schreiben zu müssen.
Kurz gesagt: Ich will ein Programm das aus mehreren Fenstern besteht und bei dem ich nur für die eigentliche Funktion Code schreiben muss und nicht für die GUI
-
1. Rechte Maustaste auf Projekt > Hinzufügen
2. Qt Designer-Formular-Klasse auswählen
3. Widget oder Dialog auswählen
4. Klassenname vergebenund schon erstellt er eine neue Klasse (.cpp und .h) und eine .ui für GUI.
-
löst leider mein Problem nicht ganz.
Folgende Situation:
Ich habe in meinem Hauptfenster einen Button mit der Bezeichnung "pushButton".
Ich füge ein Fenster mit dem Namen TestWindow hinzu:<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>TestWindow</class> <widget class="QDialog" name="TestWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>400</width> <height>300</height> </rect> </property> <property name="windowTitle"> <string>Dialog</string> </property> </widget> <resources/> <connections/> </ui>
Ich schreibe eine Funktion " void MainWindow::on_pushButton_clicked()":
void MainWindow::on_pushButton_clicked() { TestWindow->resize(320, 240); TestWindow->show(); }
Beim kompilieren erhalte ich folgende Ausgabe:
TestWindow was not declared in this scope.
-
Wie bindest du dann die ui in deine Klasse ein?
Kennst du denn das hier schon?
-
Ich habe jetzt diesen Code:
void MainWindow::on_pushButton_clicked() { TestWindow->resize(320, 240); TestWindow->show(); }
durch diesen ersetzt:
void MainWindow::on_pushButton_clicked() { TestWindow window; window->resize(320, 240); window->show(); }
Jetzt sieht man das Fenster auch kurz wenn man auf den Button drückt, allerdings verschwindet es sofort wieder.
-
Hast du denn die erste Frage meiner letzten Antwort durchgelesen? Ich frag sowas nicht aus Spaß...
Hast du dir den Link angeschaut? Wenn ja könntest du auf die erste Frage klar antworten "private inheritance, aggregation, direct approach". Wenn du damit gar nicht klar kommst, kannst du ja deine Klassendefinition posten.Warum du jetzt Probleme hast: "TestWindow window;" ist ein neues Objekt im automatischen Speicher. Dieses wird naturgemäß beim Verlassen des Gültigkeitsbereichs zerstört. Darum siehst du maximal ein kurzes Auffklackern.
Kann es sein dass dir noch ordenlich C++-Grundlagen abgehen?
-
void MainWindow::on_pushButton_clicked() { TestWindow window; window->resize(320, 240); window->show(); }
da meckert garantiert der Compiler!
Muss doch so aussehen:
void MainWindow::on_pushButton_clicked() { TestWindow *window = new TestWindow(this); window->resize(320, 240); window->show(); }
-
l'abra d'or schrieb:
Hast du denn die erste Frage meiner letzten Antwort durchgelesen? Ich frag sowas nicht aus Spaß...
Hast du dir den Link angeschaut?Ja, habe ich.
l'abra d'or schrieb:
Kann es sein dass dir noch ordenlich C++-Grundlagen abgehen?
Ja, da ich normalerweiße in C programmiere, aber es sieht so aus, dass ich um Qt zu schreiben wohl nicht um C++ herumkomme. Dann muss ich mir das wohl oder übel mal anschauen.
@Softwaremaker: Da wo ich "->" gepostet habe steht eigentlich "."
Ich habe den Quellcode abgetippt, da ich kein Copy&Paste machen wollte, da ich noch etwas wichtiges in der Zwischenablage hatte und das vorerst nicht zwischenspeicerh wollte.
-
123456789 schrieb:
Ja, da ich normalerweiße in C programmiere, aber es sieht so aus, dass ich um Qt zu schreiben wohl nicht um C++ herumkomme. Dann muss ich mir das wohl oder übel mal anschauen.
Wie kommt man nur auf den Gedanken, Qt-Anwendungen zu schreiben ohne C++ Kenntnisse? Qt basiert komplett auf Klassen. Ohne Wissen dazu wirst du wohl noch öfter solche Probleme haben.
-
123456789 schrieb:
Kurz gesagt: Ich will ein Programm das aus mehreren Fenstern besteht und bei dem ich nur für die eigentliche Funktion Code schreiben muss und nicht für die GUI
Auch wenn das eigentliche Problem schon gelöst ist - So wie du das formulierst geht es nicht. Du kannst mit dem Designer das Layout festlegen, das Verhalten der Oberfläche musst du trotzdem programmieren.
Wenn dir die Grundlagen sowieso fehlen würde ich dir empfehlen die Examples von Qt anzuschauen.