qt多窗口切换,求教

liu_fanyi3 2014-05-14 11:52:27
网上都是两个窗口的。。。
三个窗口出现问题
主要表现在,通过第一个窗口打开第二个窗口再打开第三个窗口后,从第三个窗口返回到第二个窗口,再返回第一个窗口的时候窗口都关闭了。
采用的是hide exec来进行切换的。。。要求必须将前一个窗口隐藏。代码如下
第一个窗口的
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog1.h"
#include "dialog2.h"
#include "dialog3.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();

private:
Ui::MainWindow *ui;
Dialog1 dialog1;
Dialog2 dialog2;
Dialog3 dialog3;
};

#endif // MAINWINDOW_H


#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
this->hide();
// dialog1.show();
if (dialog1.exec() == QDialog::Accepted){
this->show();
}

}

void MainWindow::on_pushButton_2_clicked()
{
this->hide();
// dialog2.show();
if (dialog2.exec() == QDialog::Accepted){
this->show();
}

}

void MainWindow::on_pushButton_3_clicked()
{
this->hide();
// dialog3.show();
if (dialog3.exec() == QDialog::Accepted){
this->show();
}
}


第二个窗口的:
#ifndef DIALOG2_H
#define DIALOG2_H

#include <QDialog>
#include <dialog21.h>
namespace Ui {
class Dialog2;
}

class Dialog2 : public QDialog
{
Q_OBJECT

public:
explicit Dialog2(QWidget *parent = 0);
~Dialog2();

private slots:
void on_pushButton_clicked();
// void on_pushButton_3_clicked();

void on_pushButton_3_clicked();

private:
Ui::Dialog2 *ui;
Dialog21 dialog21;

};


#include "dialog2.h"
#include "ui_dialog2.h"

Dialog2::Dialog2(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog2)
{
ui->setupUi(this);
}

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

void Dialog2::on_pushButton_clicked()
{
this->hide();
// dialog21.show();
if (dialog21.exec() == QDialog::Accepted){
this->show();
}

}


第三个窗口的
#ifndef DIALOG21_H
#define DIALOG21_H

#include <QDialog>
#include <dialog211.h>
#include <dialog212.h>
#include <dialog213.h>

namespace Ui {
class Dialog21;
}

class Dialog21 : public QDialog
{
Q_OBJECT

public:
explicit Dialog21(QWidget *parent = 0);
~Dialog21();

private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();

private:
Ui::Dialog21 *ui;
Dialog211 dialog211;
Dialog212 dialog212;
Dialog213 dialog213;

};


#include "dialog21.h"
#include "ui_dialog21.h"
#include "math.h"
#define e 2.718281828459
#define pi 3.1415926

Dialog21::Dialog21(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog21)
{
ui->setupUi(this);
}

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

void Dialog21::on_pushButton_clicked()
{
this->hide();
dialog211.show();
if (dialog211.exec() == QDialog::Accepted){
dialog211.close();
this->show();
}
}

void Dialog21::on_pushButton_2_clicked()
{
this->hide();
// dialog212.show();
if (dialog212.exec() == QDialog::Accepted){
dialog212.close();
this->show();
}
}

void Dialog21::on_pushButton_3_clicked()
{
this->hide();
dialog213.show();
if (dialog213.exec() == QDialog::Accepted){
dialog213.close();
this->show();
}
}


其实还有很多很多窗口。。。但是三个窗口就出问题了。。。
新手求指教。
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_fanyi3 2014-05-17
  • 打赏
  • 举报
回复
引用 3 楼 ying_593254979 的回复:
有点乱。。。。。。
额。。。。我也有点乱。。。。。。还是没办法解决呀。。。
liu_fanyi3 2014-05-17
  • 打赏
  • 举报
回复
引用 5 楼 feilinhe 的回复:
只看到一点,例如你的:

void Dialog21::on_pushButton_3_clicked()
{
    this->hide();
    dialog213.show();
    if (dialog213.exec() == QDialog::Accepted){
        dialog213.close();
        this->show();
    }
}
完全只需要:

void Dialog21::on_pushButton_3_clicked()
{
    this->hide();
    if (dialog213.exec() == QDialog::Accepted){
        this->show();
    }
}
恩,对,这个是写重复了,后来改掉了。。。不过。。。bug还是存在
feilinhe 2014-05-17
  • 打赏
  • 举报
回复
只看到一点,例如你的:

void Dialog21::on_pushButton_3_clicked()
{
    this->hide();
    dialog213.show();
    if (dialog213.exec() == QDialog::Accepted){
        dialog213.close();
        this->show();
    }
}
完全只需要:

void Dialog21::on_pushButton_3_clicked()
{
    this->hide();
    if (dialog213.exec() == QDialog::Accepted){
        this->show();
    }
}
ying_593254979 2014-05-16
  • 打赏
  • 举报
回复
有点乱。。。。。。
liu_fanyi3 2014-05-15
  • 打赏
  • 举报
回复
进程不在了,这也是我比较困惑的地方。。。按理说应该是没有Accepted状态了,没有show,那么至少应该还处在hide的状态啊。。。对了,那个Accepted状态时用在ui界面按f4直接在返回按钮上拖动添加的。。。 感觉还有运行机制没有搞明白。。。 如果不加if (dialog212.exec() == QDialog::Accepted) 直接在exec后show的话,就会出现多显示了前面的一个界面,就是从3返回的时候,1和2都显示了,而且1死机了,2还能正常关闭。 实在理解不了怎么回事,忘解答。。。 昨天发烧了,刚看到,不好意思啊。。。。。。
引用 1 楼 FounderSG 的回复:
是都关闭了还是主窗口处于hide状态,开一下Process explorer看看进程是不是还在,只是窗口没显示出来。
FounderSG 2014-05-14
  • 打赏
  • 举报
回复
是都关闭了还是主窗口处于hide状态,开一下Process explorer看看进程是不是还在,只是窗口没显示出来。

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧