Seite 1 von 1

Kontrolle von Startup-Fenster an MainWindow weitergeben

Verfasst: 11. Juni 2007 22:39
von qmaddin
Hallo!

Ich starte in main.cpp

Code: Alles auswählen

#include <QApplication>

#include "mainwindow.h"
#include "startup.h"

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	Startup startup;
	startup.show();
	return app.exec();
}
das Startup-Fenster. Dort soll zwischen Zwei Checkboxen ausgewählt werden. Ist die eine aktiv und wird danach auf einen QPushButton gedrückt, soll das Mainwindow aufgehen:

mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>

class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	MainWindow();

private:
	QLabel *headline;
};

#endif
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"

MainWindow::MainWindow()
{
	setCentralWidget(headline);

// 	this->resize();
}
Wie bekomme ich es nun hin, dass das Startup-Fenster die Fluss-Kontrolle an Mainwindow abgibt und dann verschwindet?

Ich hätte an einen Slot gedacht:

Code: Alles auswählen

connect(okButton, SIGNAL(clicked()), this, SLOT(okClicked()));

void Startup::okClicked()
{
	if (radio->isChecked() == true)
	{
 		MainWindow mainWindow;
		mainWindow.show();
	}
}
Problem: Das MainWindow erscheint zwar, aber nur ganz kurz (wenige Millisekunden). Wie schaffe ich es nun, dass als erstes das Startup-Fenster gestartet wird, und beim Klicken auf Ok das Startup-Fenster sich schließt und sich das MainWindow öffnet?

Zusatz: Wie schaffe ich es, dass das MainWindow genauso groß wird, dass das enthaltene QTableView keine Scrollbars mehr hat?

Danke schonmal!

Verfasst: 11. Juni 2007 23:22
von Volker

Code: Alles auswählen

void Startup::okClicked()
{
   if (radio->isChecked() == true)
   {
       MainWindow mainWindow;
      mainWindow.show();
   }
}
Überleg mal wie lange das mainWindow Objekt existiert?

Verfasst: 12. Juni 2007 11:06
von qmaddin
Volker hat geschrieben:Überleg mal wie lange das mainWindow Objekt existiert?
Vermutlich nur so lange, wie okClicked() durchlaufen wird. (Das impliziert zumindest Deine Antwort :D ) Aber wie schaffe ich es, dass es weiterexistiert?

Wenn ich das mainWindow im Konstruktor von Startup erzeuge (MainWindow mainWindow;), kann ich es im Slot okClicked() nicht mit mainWindow.show(); anzeigen lassen (startup.cpp:40: Fehler: »mainWindow« wurde in diesem Gültigkeitsbereich nicht definiert).
Wenn ich das MainWindow schon in main.cpp erzeuge, dann habe ich das gleiche Problem, nämlich dass ich nicht darauf zugreifen kann... :cry:

Danke!

Verfasst: 12. Juni 2007 12:23
von upsala
Nein, es existiert sogar nur innerhalb des if-Blocks. Grundlagen C++!

Code: Alles auswählen

void Startup::okClicked()
{
   if (radio->isChecked() == true)
   {
       MainWindow *mainWindow=new MainWindow();
      mainWindow->show();
   }
}