找回密码
 立即注册
收起左侧

QStakcedLayout使用出问题了,弹出窗口而不切换窗口,求指导

2
回复
6869
查看
[复制链接]
累计签到:6 天
连续签到:1 天
来源: 2017-1-22 21:09:52 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 Qt小菜 于 2017-1-22 21:12 编辑

在使用QStackedLayout切换界面的时候,界面不切换,而是直接弹出新窗口

使用QStackedLayout的类的声明和定义:
  1. class ControlInterface : public QWidget
  2. {
  3.     Q_OBJECT
  4. public:
  5.     explicit ControlInterface(QWidget *parent = 0);

  6. signals:

  7. public slots:
  8. private:
  9.     MainInterface *mainInterface;
  10.     Jigsaw *jigsaw;
  11.     GobangControl *gobangControl;
  12.     QStackedLayout *stackedLayout;
  13.     QVBoxLayout *vLayout;
  14. };
复制代码
  1. #include "ControlInterface.h"

  2. ControlInterface::ControlInterface(QWidget *parent) : QWidget(parent)
  3. {
  4.     stackedLayout = new QStackedLayout(this);
  5.     vLayout = new QVBoxLayout;
  6.     mainInterface = new MainInterface(this);
  7.     gobangControl = new GobangControl(this);
  8.     jigsaw = new Jigsaw(this);

  9.     stackedLayout->addWidget(mainInterface);//0
  10.     stackedLayout->addWidget(gobangControl);//1
  11.     stackedLayout->addWidget(jigsaw);//2

  12.     stackedLayout->setCurrentIndex(0);

  13.     vLayout->addLayout(stackedLayout);

  14.     connect(mainInterface,&MainInterface::display,stackedLayout,&QStackedLayout::setCurrentIndex);


  15.     this->setLayout(vLayout);
  16. }

复制代码
这里是MainInterface类的声明和定义:
  1. class MainInterface : public QWidget
  2. {
  3.     Q_OBJECT
  4. public:
  5.     explicit MainInterface(QWidget *parent = 0);

  6. signals:
  7.     void display(int number);
  8. public slots:
  9.     void gobangClicked();
  10.     void jigsawClicked();
  11. private:

  12.     QPushButton *gobangBtn,*jigsawBtn;
  13.     QVBoxLayout *vLayout;
  14. };
复制代码
  1. #include "MainInterface.h"

  2. MainInterface::MainInterface(QWidget *parent) : QWidget(parent)
  3. {
  4.     gobangBtn = new QPushButton("Gobang",this);
  5.     jigsawBtn = new QPushButton("Jigsaw",this);
  6.     vLayout = new QVBoxLayout;

  7.     connect(gobangBtn,&QPushButton::clicked,this,&MainInterface::gobangClicked);
  8.     connect(jigsawBtn,&QPushButton::clicked,this,&MainInterface::jigsawClicked);

  9.     vLayout->addWidget(gobangBtn);
  10.     vLayout->addWidget(jigsawBtn);

  11.     this->setLayout(vLayout);
  12. }

  13. void MainInterface::gobangClicked()
  14. {
  15.     emit display(1);
  16. }

  17. void MainInterface::jigsawClicked()
  18. {
  19.     emit display(2);
  20. }
复制代码
在切换界面到GobangControl 类的界面和Jigsaw 类的界面的时候会直接弹出窗口,然后原窗口会变成一个空窗口。
用法是网上学的,之前写了三个界面试着切换了一下,正常切换窗口,放到我写的程序里就编程弹出窗口了。GobangControl 窗口的大小是固定的,改成不固定的还是有问题,,GobangControl 里面的QGraphicsScene的一个实例的大小是固定的。
毛病如图所示,后边哪个空白的界面就是主界面,点解切换界面的按钮后就弹出了要切换的界面,求指导



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

QMainWindow是用于顶层窗口的
回复

使用道具 举报

累计签到:1564 天
连续签到:1 天
2017-1-22 21:09:53 显示全部楼层
Qt小菜 发表于 2017-1-22 23:16
找到原因了,我写的子窗口是继承了QMainWindow,继承QMainWindow的窗口在切换界面时会重新弹出窗口,如果继 ...

QMainWindow是用于顶层窗口的
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2017-1-22 23:16:40 显示全部楼层
找到原因了,我写的子窗口是继承了QMainWindow,继承QMainWindow的窗口在切换界面时会重新弹出窗口,如果继承QWidget就不再弹出窗口,可以正常切换界面了。求解答,为什么继承QMainWindow会重新弹出一个窗口??????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了