Ja, ich bin es hier nochmal in diesem Thread. Beziehe mich auf die Aussage von Hunter:
jetzt z.B. den SLOT in deiner Auswahl klasse machst musst du auch einen Pointer zum mainWindow und myA an die Klasse übergeben und dann im slot aufrufen:
mainWindow->setCentralWidget(myA);
Das habe ich versucht zu realisieren, also einen Zeiger aus Auswahl auf das MainWindow. Hier der Quellcode. Ich habe die entsprechenden Zeilen kommentiert:
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <auswahl.h>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
Auswahl *myAuswahl;
};
#endif // MAINWINDOW_H
Code: Alles auswählen
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
myAuswahl = new Auswahl(this); // Übergabe des MainWindow Objekts im Konstruktor von Auswahl
setCentralWidget(myAuswahl);
}
MainWindow::~MainWindow()
{
}
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();
}
Code: Alles auswählen
#ifndef AUSWAHL_H
#define AUSWAHL_H
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>
#include <a.h>
//#include <mainwindow.h>
#include <QApplication>
class Auswahl : public QWidget
{
Q_OBJECT
public:
Auswahl(MainWindow * myWin); // Konstruktor mit Objekt MainWindow
QPushButton *buttonAuswahlKlasseA;
QPushButton *buttonAuswahlBeenden;
QVBoxLayout * layoutAuswahl;
QLabel * labelInfoAuswahl;
MainWindow *windowObj; // Zeiger auf ein MainWindow Objekt
A *myA;
public slots:
void createA(void);
};
#endif // AUSWAHL_H
#include <auswahl.h>
#include <mainwindow.h> //
Code: Alles auswählen
Auswahl::Auswahl(MainWindow *myWin)
{
windowObj = myWin; // Zuweisung des übergebenen Obejkts MainWindow
buttonAuswahlKlasseA = new QPushButton(tr("Auswahl Klasse A"));
connect(buttonAuswahlKlasseA, SIGNAL(clicked()), this, SLOT(createA()));
buttonAuswahlBeenden = new QPushButton(tr("Beenden"));
connect(buttonAuswahlBeenden, SIGNAL(clicked()), qApp, SLOT(quit())); // Beendent Applikation
labelInfoAuswahl = new QLabel(tr("Auswahl Klasse"));
layoutAuswahl = new QVBoxLayout;
layoutAuswahl->addWidget(labelInfoAuswahl);
layoutAuswahl->addWidget(buttonAuswahlKlasseA);
layoutAuswahl->addWidget(buttonAuswahlBeenden);
setLayout(layoutAuswahl);
}
void Auswahl::createA(void)
{
myA = new A();
//windowObj->setCentralWidget(myA); // hier wird über den Zeiger auf die Funktion von MainWindow zugegriffen
}
Hmm, das funktioniert leider nicht. Der Qt Creator bricht mit folgenden Hinweisen ab, aus denen ich leider nicht schlau werde, sonst hätte ich mir diesen Post ja gespart:
Was habe ich falsch gemacht? Ist bestimmt was "dummes"! Danke für hilfreiche Antworten
LG TK