[Anfänger] zweites Fenster öffnen

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

[Anfänger] zweites Fenster öffnen

Beitrag von thuering »

Gehen wir mal davon aus, ich richte mir im QtCreator ein neues Projekt ein: Datei->Neu->Qt-Widget-Projekt->Qt-Gui-Anwendung->... (die absolute Standard-Prozedur also)

Nun gibt es main.cpp, mainwindow.cpp / .h /.ui

Wie muss der Code ausschauen, damit ein Klick auf einem QPushButton des MainWindow sich ein weiteres (QWidget-) Fenster öffnet? Was muss public, was darf private sein?
Doofe Frage, ich weiß. Wenn ich es einmal gesehen habe, so denke ich, kapiere ich es auch.
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

Re: [Anfänger] zweites Fenster öffnen

Beitrag von sowas »

qt wird mit Tausenden von Beispielen und Demos ausgeliefert, mal reinschauen - es findet sicher was passendes.
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

Re: [Anfänger] zweites Fenster öffnen

Beitrag von thuering »

Hmmm... ich frage mich, ob es nicht besser ist, mir diese Frage im Forum beantworten zu lassen. :roll:

Also ich habe schon ein kleines bißchen mit Qt gemacht, da gibt es ein Textbasiertes Rollenspiel, angelehnt an das AD&D Regelwerk. Inkl. Ausgaben in ein ListWidget, Charakterdaten auslesen aus Textdateien, Savegames anlegen, Map-Dateien parsen und einiges mehr. Nur am "zweiten Fenster öffnen" komme ich nicht weiter. :oops:
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: [Anfänger] zweites Fenster öffnen

Beitrag von DBGTMaster »

NeuesFenster *window = new NeuesFenster(this);
window->show();
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

Re: [Anfänger] zweites Fenster öffnen

Beitrag von thuering »

DBGTMaster hat geschrieben:NeuesFenster *window = new NeuesFenster(this);
window->show();
Das ist nett, aber ich bin immer noch zu dummtrottelig. Bitte helft mir (noch mehr)!

main.cpp

Code: Alles auswählen

#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    void buttonclick(); //ein einfacher Button mit clicked()-Signal
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
MainWindow::buttonclick()
{
    //hier zweites Fenster öffnen, welches noch designed / aus einer noch nicht hier aufgeführten Klasse erstellt werden muss(?)
}
Wie muss es ausschauen? Wie lässt sich dieses 2. Fenster auch im UI-Designer zusammenbauen und per Klick im MainWindow aufrufen? Am liebsten kein Pseudocode, sondern was kompilierbares... einfach so, als erster-Advent-Geschenk für mich :wink: :roll:
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: [Anfänger] zweites Fenster öffnen

Beitrag von franzf »

Am liebsten kein Pseudocode, sondern was kompilierbares... einfach so, als erster-Advent-Geschenk für mich
Erster Advent... Und bis Weihnachten noch 3x Advent und dann noch ein Weihnachtsgeschenk? :roll:

Dein MainWindow hast du ja auch mit dem Designer hinbekommen, genauso macht du dein neues Widget. Das hat dann auch nen Header, den du in MainWindow.cpp einbinden kannst. Den nötigen Code für den SLOT hast du schon bekommen (diese 2 Zeilen).
Und als kleines "Adventszuckerl": Bisher wird gar nichts passieren, wenn du auf deinen Button drückst. Irgendwo muss da noch das SIGNAL(clicked()) des passenden Buttons auf dein buttonClicked() des MainWindow vonnected werden (QObject::connect()).

Aber eigentlich ist dein Problem eher ein C++-Problem: Wie erstelle ich ein Objekt in einer Methode. Das Objekt soll den Methodenaufruf überleben. Den Rest (Widget mit Designer erstellen, Widget anzeigen) hast du ja schon selber mal hinbekommen.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: [Anfänger] zweites Fenster öffnen

Beitrag von solarix »

thuering hat geschrieben:
DBGTMaster hat geschrieben:NeuesFenster *window = new NeuesFenster(this);
window->show();
...
Wie lässt sich dieses 2. Fenster auch im UI-Designer zusammenbauen und per Klick im MainWindow aufrufen?
...
Wie du vom UI-Designer auf den Code von DBGTMaster kommst, steht hier: http://doc.qt.nokia.com/latest/designer ... -file.html
Empfehlen würde ich dir einen ersten Versuch mit dem "Single Inheritance Approach".

hth!
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

Re: [Anfänger] zweites Fenster öffnen

Beitrag von thuering »

franzf hat geschrieben:Und als kleines "Adventszuckerl": Bisher wird gar nichts passieren, wenn du auf deinen Button drückst. Irgendwo muss da noch das SIGNAL(clicked()) des passenden Buttons auf dein buttonClicked() des MainWindow vonnected werden (QObject::connect()).
Aber eigentlich ist dein Problem eher ein C++-Problem: Wie erstelle ich ein Objekt in einer Methode. Das Objekt soll den Methodenaufruf überleben. Den Rest (Widget mit Designer erstellen, Widget anzeigen) hast du ja schon selber mal hinbekommen.
Ich nutze den QtCreator, da kann ich die Signal-Slot-Bindungen per ClickiBunti machen - hab ich auch hier so gemacht. Widget erstellen und anzeigen lassen habe ich also auch "nicht selber hinbekommen", sondern der ganze Kram, den ich in meinem Quellcode-Posting habe, kommt direkt vom QtCreator (außer der buttonclick()).
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

Re: [Anfänger] zweites Fenster öffnen

Beitrag von thuering »

Wer hätte denn immer noch Lust & Zeit, mir einen einfachen, kompletten, fehlerfrei kompilierenden 2-Fenster-Quelltext zu schreiben? Denn ich habe immer noch keine Fortschritte gemacht.
Ziel: Klick auf einen Button im Hauptfenster öffnet ein weiteres Fenster mit einem Textlabel in dessen Mitte "Fenster Nr. 2".
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: [Anfänger] zweites Fenster öffnen

Beitrag von Christian81 »

Ein Objekt in einem anderen Objekt anlegen... C++ Grundlagen würde ich sagen.

Code: Alles auswählen

MainWindow::buttonclick()
{
  SubWindow *win = new SubWindow(this);
  win->show();
}
Und wenn es ein Member sein sollte dann

Code: Alles auswählen

MainWindow::buttonclick()
{
  if(m_win == NULL)
    m_win = new SubWindow(this);
  m_win->show();
}
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
thuering
Beiträge: 26
Registriert: 1. November 2011 01:48

Re: [Anfänger] zweites Fenster öffnen

Beitrag von thuering »

Ich könnte einen neuen 4GB-DDR3-1333-RAM Riegel von Kingston als Aufwandsentschädigung für eine ordentliche Lösung meines doch extrem einfachen Problems (es ist ja noch nicht mal ein Problem, sondern das ABC, das 1x1, das 1-2-3 von C++ / Qt) bieten - bei Interesse bitte PN, damit die Rahmenbedingungen geklärt werden.

Noch was: Nein, ich bin nicht zu faul, mir die Sache selbst anzueignen (und selbst wenn...). Ich möchte doch nur eine Referenzlösung.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: [Anfänger] zweites Fenster öffnen

Beitrag von franzf »

Christian hat dir doch schon gezeigt, wie der SLOT aussehen muss. Wenn du den so übernimmst (Bezeichner musst du natürlich ändern) sollte alles funktionieren!
Und Qt liefert so viele Beispiele mit, wie man widgets mit dem Designer gestaltet.
Die beiden zu verbinden sollte doch nicht schwer sein, oder?
Antworten