【Qt编程】Qt学习之窗口间的相互切换

       在用Qt设计GUI时,常常要设计两个窗口之间的相互切换,便可以从一个窗口跳转到另外一个窗口,而后又从另外一个窗口跳转回原窗口。下面咱们来介绍具体的实现方法:编程

工程创建及功能描述:ide

        首先,咱们创建Qt  Gui应用,项目名TwoWindowsHandoff(能够随便取),基类选择QMainWindow。而后右击项目,添加Qt设计器界面类,类名取为logindialog。咱们在这里假设一个窗口是登陆对话框,另外一个窗口是主界面;登陆对话框有两个按钮,分别更改显示文本为login,exit;主界面也有两个按钮,分别更改显示文本为relogin,quit.。咱们最终的实现功能是:程序运行时,出现登陆对话框,点击login按钮进入主界面且登陆对话框消失;在主界面点击relogin按钮回到登陆对话框且主界面消失,点击exit按钮或quit按钮都会退出程序。函数

编程思想:ui

        咱们能够经过Qt Designer来在两个窗口上分别添加上述按钮,这里不在详细描述。咱们主要的问题是如何设计信号和槽。咱们先设计两个窗口的退出按钮:分别右击exit和quit按钮,转到槽,在槽函数中发射quit()信号,而后将信号与QApplication对象的quit()槽函数关联。这样咱们就设计好了两个退出按钮的退出操做。对于login按钮,咱们在其槽函数中发射showmainwindow()信号,隐藏对话框,而后在主窗口类中定义对应的槽函数receivelogin(),在该函数中咱们应该显示主窗口。同理对于relogin窗口,咱们在其槽函数中发射dlgshow()信号,隐藏主窗口,而后在登陆对话框类中定义对应的槽函数receivelshow(),在该函数中咱们应该显示登陆对话框。this

具体的程序实现以下:spa

1.头文件:

  mainwindow.h文件:.net

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>



namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;

private slots:
    void receivelogin();//与login中发射的信号关联的槽函数
    void on_pushButton_clicked();//与relogin的click()关联的槽函数

    void on_pushButton_2_clicked();//与quit的click()关联的槽函数

signals:
    void dlgshow();//显示登陆对话框信号
    void quit();//退出信号


};

#endif // MAINWINDOW_H

mydialog.h文件:

#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
namespace Ui {
class MyDialog;
}
class MyDialog : public QDialog
{
    Q_OBJECT
    
public:
    explicit MyDialog(QWidget *parent = 0);
    ~MyDialog();
    
private slots:
    void on_pushButton_clicked();//与login关联的槽函数
    void receiveshow();//与relogin中发射的信号关联的槽函数
    void on_pushButton_2_clicked();//与exit关联的槽函数
signals:
    void showmainwindow();//显示主窗口信号
    void quit();//退出信号
private:
    Ui::MyDialog *ui;
};
#endif // MYDIALOG_H

2.源文件:

main.cpp文件:

#include <QtGui/QApplication>
#include "mainwindow.h"
#include"mydialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    MyDialog dlg;
    dlg.show();
    //信号与槽之间进行关联
    QObject::connect(&dlg,SIGNAL(showmainwindow()),&w,SLOT(receivelogin()));
    QObject::connect(&w,SIGNAL(dlgshow()),&dlg,SLOT(receiveshow()));
    QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
    QObject::connect(&dlg,SIGNAL(quit()),&a,SLOT(quit()));
    return a.exec();
}


mainwindow.cpp文件:设计

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QHBoxLayout>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);//默认是类名
    setWindowTitle(tr("myMainWindow"));

}

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

void MainWindow::receivelogin()
{
    this->show();//显示主窗口
}

void MainWindow::on_pushButton_clicked()
{
    this->hide();//隐藏主窗口
    emit dlgshow();//发射显示登陆对话框信号
}

void MainWindow::on_pushButton_2_clicked()
{
    emit quit();//发射退出信号
}


mydialog.cpp文件:code

#include "mydialog.h"
#include "ui_mydialog.h"
#include<QHBoxLayout>
#include<mainwindow.h>

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

}

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

void MyDialog::on_pushButton_clicked()
{
    this->hide();//隐藏登陆对话框
    emit showmainwindow();//显示主窗口
}


void MyDialog::receiveshow()
{
    this->show();//显示登陆对话框

}

void MyDialog::on_pushButton_2_clicked()
{
    emit quit();//发射退出信号
}

3.ui文件(窗口设计)





原文:http://blog.csdn.net/tengweitw/article/details/21275721对象

做者:nineheadedbird