QStackedWidget 具体如何使用它?



我以前尝试过使用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);
}

这是马菲内特雷的代码马芬内特雷·

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

我已经分享了下面的示例代码,希望对您有所帮助。

#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);
}

答案只是在所需的窗口上定义一个自定义信号来切换,该信号将被发送到主窗口,以便它为您显示正确的开关

相关内容

  • 没有找到相关文章

最新更新