Я пытался использовать QStackedWidget
раньше, но не совсем понял, как это сделать. Приведенный ниже код помогает мне понять, как изменить текущее окно с главного окна на другое окно, уже вызываемое в основном окне, и это работает хорошо. Я изменил текущий индекс на все остальные окна, и каждый раз окно не то же самое, что хорошо.
Мой вопрос:
Как из другого окна переключиться на другое окно (отличное от текущего)? Должен ли я определять этот QStackedWidget
во всех других окнах, чтобы я мог использовать его так же, как я использую его здесь? Мне бы хотелось, чтобы после нажатия кнопки в окне (других окнах) окно переключалось на другое. Как я могу это сделать?
Например, в этом коде у меня есть FenetrePrincipale, который позволяет мне изменять окна с помощью setCurrentIndex
, например, установив setCurrentIndex
на 3, чтобы первое появившееся окно было MAFENETRE3.
Я хотел бы, например, от MAFENTRE3 использовать кнопку, которая позволяет мне переключаться в другое окно. (на самом деле после проблем с QStackedWidget
я просто нормально реализую свой код и вместо переключения в другое окно я просто открываю окно в нижней части вызова окна, что выглядит не очень хорошо!
PS ЗДЕСЬ КОД ТЕСТА:
fenetrprincipale.h
#ifndef FENETRE_PRINCIPALE
#define FENETRE_PRINCIPALE
#include <QApplication>
#include <QtWidgets>
#include "MaFenetre.h"
#include "MaFenetre2.h"
#include "MaFenetre3.h"
#include "MaFenetre4.h"
class FenetrePrincipale : public QMainWindow
{
Q_OBJECT
public:
FenetrePrincipale();
~FenetrePrincipale();
public slots:
void slotDisplayFen(int fenIndex);
private:
QStackedWidget *stack;
MaFenetre *fen1;
MaFenetre2 *fen2;
MaFenetre3 *fen3;
MaFenetre4 *fen4;
};
#endif
fenetreprincipale.cpp
#include "FenetrePrincipale.h"
FenetrePrincipale::FenetrePrincipale() : QMainWindow()
{
stack = new QStackedWidget(this);
fen1 = new MaFenetre();
fen2 = new MaFenetre2 ();
fen3 = new MaFenetre3();
fen4 = new MaFenetre4();
stack->addWidget(fen1);
stack->addWidget(fen2);
stack->addWidget(fen3);
stack->addWidget(fen4);
this->setCentralWidget(stack);
stack->setCurrentIndex(0); // on affiche la première fenêtre à l'ouverture du programme
setWindowTitle("Test STACKEDLAYOUT");
resize(500,600);
connect(fen1, SIGNAL(askDisplayFen(int)), this, SLOT(slotDisplayFen(int)));
connect(fen2, SIGNAL(askDisplayFen(int)), this, SLOT(slotDisplayFen(int)));
connect(fen3, SIGNAL(askDisplayFen(int)), this, SLOT(slotDisplayFen(int)));
connect(fen4, SIGNAL(askDisplayFen(int)), this, SLOT(slotDisplayFen(int)));
}
FenetrePrincipale::~FenetrePrincipale()
{
}
void FenetrePrincipale::slotDisplayFen(int fenIndex)
{
if ((fenIndex < 0) || (fenIndex > 3)) {return;}
stack->setCurrentIndex(fenIndex);
}
Вот код Mafenetre MaFenetre.h
#ifndef DEF_MAFENETRE
#define DEF_MAFENETRE
#include <QtWidgets>
class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT)
{
public:
MaFenetre();
private:
QPushButton *m_bouton;
};
#endif
Мафенетре.cpp
#include "MaFenetre.h"
MaFenetre::MaFenetre() : QWidget()
{
setFixedSize(300, 150);
m_bouton = new QPushButton("Quitter", this);
m_bouton->setFont(QFont("Comic Sans MS", 14));
m_bouton->move(110, 50);
// Connexion du clic du bouton à la fermeture de l'application
QObject::connect(m_bouton, SIGNAL(clicked()), qApp, SLOT(quit()));
}
askDisplayFen
? - person eyllanesc   schedule 11.06.2018