QT 两窗口来回切换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33308135/article/details/82897913

方法一:利用指针

//Dialog.cpp
#include <MainWindow.h>
void Dialog::on_pushButton_clicked()
{
    MainWindow *m = new MainWindow(this);
    m->show();
    this->hide();
}

//MainWindow.cpp
#include <Dialog.h>
void MainWindow::on_pushButton_clicked()
{
    Dialog *d = new Dialog(this);
    d->show();
    d->exec();
    this->hide();
}

运行此程序,首先进入的是MainWindow界面,点击pushButton,MainWindow界面消失,打开Dialog,此时尚且正常,值得一提的是,再点击Dialog界面的pushButton,切回MainWindow界面时,任务栏会失去该程序,如图所示,初步判断原因是exec(),但是由于MainWindow没有exec(),所以Tinkle尚未找到解决方法,因此不建议采用,接着请看方法二
在这里插入图片描述

在这里插入图片描述

方法二:使用信号与槽

//main.cpp 
#include <Dialog.h>
#include <MainWindow.h>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    Dialog d;

    w.show();
    d.hide();
    QObject::connect(&d,SIGNAL(showwnd()),&w,SLOT(getshowwnd()));
    QObject::connect(&w,SIGNAL(showdlg()),&d,SLOT(getshowdlg()));
    return a.exec();
} 

//dialog.cpp

void Dialog::getshowdlg()
{
    this->show();
}
void Dialog::on_pushButton_clicked()
{
    this->hide();
    emit showwnd();
}

//dialog.h

signals:
    showwnd();
private slots:
    void getshowdlg();
    void on_pushButton_clicked();

//MainWindow.cpp

void MainWindow::on_pushButton_clicked()
{
    this->hide();
    emit showdlg();
}
void MainWindow::getshowwnd()
{
    this->show();
}

//MainWindow.h

signals:
    showdlg();
private slots:
    void on_pushButton_clicked();
    void getshowwnd();  

猜你喜欢

转载自blog.csdn.net/qq_33308135/article/details/82897913
今日推荐