Ich bin Informatik Student und neu in diesem Forum.
Habe zur Zeit ein Projekt in dem ich, nach langem Probieren, stecken geblieben bin und euch nun um Rat frage.
Wie ist es möglich bei zwei QMainWindows (oder auch QWidgets - egal) , die sich gegenseitig aufrufen (ein Hauptmenü, von dem aus ein weiteres Fenster aufgerufen wird), aus dem einen Fenster auf Widgets des anderen zuzugreifen?
Beispiel: Fenster1 und Fenster2 sind die QMainWindows und haben jeweils einen QPushButton um sich gegenseitig aufzurufen. Das heißt, klicke ich in Fenster1 auf den Button, wird Fenster1 auf hidden gesetzt und Fenster2 auf visible und umgekehrt.
Nun würde ich gerne beim Klick auf den Button den Text des Buttons des anderen Fensters ändern - aber wie mache ich das?
Hier ist mein Code:
fenster.h
Code: Alles auswählen
#ifndef FENSTER_H
#define FENSTER_H
#include <QtGui/QMainWindow>
#include "ui_fenster.h"
#include "fenster2.h"
class Fenster : public QMainWindow
{
Q_OBJECT
public:
Fenster(QWidget *parent = 0, Qt::WFlags flags = 0);
~Fenster();
Fenster2 *fen;
void changeText(QString str);
private:
Ui::FensterClass ui;
public slots:
void on_pushButton_clicked();
};
#endif // FENSTER_H
fenster.cpp
Code: Alles auswählen
#include "fenster.h"
Fenster::Fenster(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}
Fenster::~Fenster()
{
}
void Fenster::on_pushButton_clicked()
{
fen = new Fenster2(this);
fen->show();
this->setHidden(true);
}
void Fenster::changeText(QString str)
{
this->ui.pushButton->setText(str);
}fenster2.h
Code: Alles auswählen
#ifndef FENSTER2_H
#define FENSTER2_H
#include <QtGui/QMainWindow>
#include "ui_fenster2.h"
#include "fenster.h"
class Fenster2 : public QMainWindow
{
Q_OBJECT
public:
Fenster2(QWidget *parent = 0, Qt::WFlags flags = 0);
~Fenster2();
private:
Ui::Form ui;
public slots:
void on_pushButton_clicked();
};
#endif // FENSTER2_H
fenster2.cpp
Code: Alles auswählen
#include "fenster2.h"
QWidget *p;
Fenster2::Fenster2(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
p = parent;
ui.setupUi(this);
}
Fenster2::~Fenster2()
{
}
void Fenster2::on_pushButton_clicked()
{
// Expliziter Downcast
//((Fenster)p).changeText("Hallo");
p->setVisible(true);
this->setHidden(true);
}
Ich arbeite für das Layout mit dem QDesigner und habe die .ui Dateien weggelassen, weil sie in diesem Fall ja keine Rolle spielen dürfte.
Außerdem noch eine Frage:
Warum motzt der Compiler bei dieser Deklaration in der fenster.h rum:
Code: Alles auswählen
Fenster2 *fen; Das sollte doch gehen oder?
Bitte sagt mir auch bescheid, wenn irgendwas am Code falsch oder nicht so toll ist, damit ich das gleich richtig mache.
Danke!