Qt学习之窗口间的相互切换

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

工程建立及功能描述:

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

编程思想:

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

具体的程序实现如下:

1.头文件:

  mainwindow.h文件:

 

 
  1. #ifndef MAINWINDOW_H

  2. #define MAINWINDOW_H

  3.  
  4. #include

  5.  
  6.  
  7.  
  8. namespace Ui {

  9. class MainWindow;

  10. }

  11.  
  12. class MainWindow : public QMainWindow

  13. {

  14. Q_OBJECT

  15.  
  16. public:

  17. explicit MainWindow(QWidget *parent = 0);

  18. ~MainWindow();

  19.  
  20. private:

  21. Ui::MainWindow *ui;

  22.  
  23. private slots:

  24. void receivelogin();//与login中发射的信号关联的槽函数

  25. void on_pushButton_clicked();//与relogin的click()关联的槽函数

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

  28.  
  29. signals:

  30. void dlgshow();//显示登录对话框信号

  31. void quit();//退出信号

  32.  
  33.  
  34. };

  35.  
  36. #endif // MAINWINDOW_H


mydialog.h文件:

 

 

 

  1. #ifndef MYDIALOG_H

  2. #define MYDIALOG_H

  3. #include

  4. namespace Ui {

  5. class MyDialog;

  6. }

  7. class MyDialog : public QDialog

  8. {

  9. Q_OBJECT

  10.  
  11. public:

  12. explicit MyDialog(QWidget *parent = 0);

  13. ~MyDialog();

  14.  
  15. private slots:

  16. void on_pushButton_clicked();//与login关联的槽函数

  17. void receiveshow();//与relogin中发射的信号关联的槽函数

  18. void on_pushButton_2_clicked();//与exit关联的槽函数

  19. signals:

  20. void showmainwindow();//显示主窗口信号

  21. void quit();//退出信号

  22. private:

  23. Ui::MyDialog *ui;

  24. };

  25. #endif // MYDIALOG_H

 

2.源文件:

 

main.cpp文件:

 

 
  1. #include

  2. #include "mainwindow.h"

  3. #include"mydialog.h"

  4.  
  5. int main(int argc, char *argv[])

  6. {

  7. QApplication a(argc, argv);

  8. MainWindow w;

  9. MyDialog dlg;

  10. dlg.show();

  11. //信号与槽之间进行关联

  12. QObject::connect(&dlg,SIGNAL(showmainwindow()),&w,SLOT(receivelogin()));

  13. QObject::connect(&w,SIGNAL(dlgshow()),&dlg,SLOT(receiveshow()));

  14. QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));

  15. QObject::connect(&dlg,SIGNAL(quit()),&a,SLOT(quit()));

  16. return a.exec();

  17. }

 

mainwindow.cpp文件:

 

 
  1. #include "mainwindow.h"

  2. #include "ui_mainwindow.h"

  3. #include

  4. #include

  5.  
  6. MainWindow::MainWindow(QWidget *parent) :

  7. QMainWindow(parent),

  8. ui(new Ui::MainWindow)

  9. {

  10. ui->setupUi(this);//默认是类名

  11. setWindowTitle(tr("myMainWindow"));

  12.  
  13. }

  14.  
  15. MainWindow::~MainWindow()

  16. {

  17. delete ui;

  18. }

  19.  
  20. void MainWindow::receivelogin()

  21. {

  22. this->show();//显示主窗口

  23. }

  24.  
  25. void MainWindow::on_pushButton_clicked()

  26. {

  27. this->hide();//隐藏主窗口

  28. emit dlgshow();//发射显示登录对话框信号

  29. }

  30.  
  31. void MainWindow::on_pushButton_2_clicked()

  32. {

  33. emit quit();//发射退出信号

  34. }

 

mydialog.cpp文件:

 

 
  1. #include "mydialog.h"

  2. #include "ui_mydialog.h"

  3. #include

  4. #include

  5.  
  6. MyDialog::MyDialog(QWidget *parent) :

  7. QDialog(parent),

  8. ui(new Ui::MyDialog)

  9. {

  10. ui->setupUi(this);

  11.  
  12. }

  13.  
  14. MyDialog::~MyDialog()

  15. {

  16. delete ui;

  17. }

  18.  
  19. void MyDialog::on_pushButton_clicked()

  20. {

  21. this->hide();//隐藏登录对话框

  22. emit showmainwindow();//显示主窗口

  23. }

  24.  
  25.  
  26. void MyDialog::receiveshow()

  27. {

  28. this->show();//显示登录对话框

  29.  
  30. }

  31.  
  32. void MyDialog::on_pushButton_2_clicked()

  33. {

  34. emit quit();//发射退出信号

  35. }

 

3.ui文件(窗口设计)

 

Qt学习之窗口间的相互切换_第1张图片

 

Qt学习之窗口间的相互切换_第2张图片

 

你可能感兴趣的:(QT学习)