QStackedWidget, как именно его использовать?

Я пытался использовать QStackedWidget раньше, но я не понимал, как именно, приведенный ниже код помогает мне понять, как изменить текущее окно из главного окна в другое окно, уже вызванное в главном окне, и это работает хорошо, я изменил currentindex на все другие окна, и каждый раз, когда окно не то же самое, что хорошо, но мой вопрос, после определения этого окна,

Мой вопрос:

Из другого окна, как я могу переключиться на другое окно (отличное от текущего)? Должен ли я определить это 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

MaFenetre.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()));
}

-2

Решение

Я поделился с примером кода ниже, я надеюсь, что это поможет вам.

#include "test1.h"#include "ui_test1.h"#include<QDebug>

test1::test1(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::test1)
{
ui->setupUi(this);
stack = new QStackedWidget(this);
tes = new test2();
stack->addWidget(ui->pushButton);
stack->addWidget(tes);
this->setCentralWidget(stack);
stack->setCurrentIndex(0);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(slotDisplayFen()));

}

test1::~test1()
{
delete ui;
}

void test1::slotDisplayFen()
{
qDebug()<<"test";
stack->setCurrentIndex(1);
}
0

Другие решения

Ответ заключается в том, чтобы просто определить пользовательский сигнал в желаемом окне для переключения, и этот сигнал будет отправлен в главное окно, чтобы он отображал правильный переключатель для вас

0

По вопросам рекламы [email protected]