当前位置:   article > 正文

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

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. #include <QMainWindow>
  4. namespace Ui {
  5. class MainWindow;
  6. }
  7. class MainWindow : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit MainWindow(QWidget *parent = 0);
  12. ~MainWindow();
  13. private:
  14. Ui::MainWindow *ui;
  15. private slots:
  16. void receivelogin();//与login中发射的信号关联的槽函数
  17. void on_pushButton_clicked();//与relogin的click()关联的槽函数
  18. void on_pushButton_2_clicked();//与quit的click()关联的槽函数
  19. signals:
  20. void dlgshow();//显示登录对话框信号
  21. void quit();//退出信号
  22. };
  23. #endif // MAINWINDOW_H

mydialog.h文件:

  1. #ifndef MYDIALOG_H
  2. #define MYDIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class MyDialog;
  6. }
  7. class MyDialog : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit MyDialog(QWidget *parent = 0);
  12. ~MyDialog();
  13. private slots:
  14. void on_pushButton_clicked();//与login关联的槽函数
  15. void receiveshow();//与relogin中发射的信号关联的槽函数
  16. void on_pushButton_2_clicked();//与exit关联的槽函数
  17. signals:
  18. void showmainwindow();//显示主窗口信号
  19. void quit();//退出信号
  20. private:
  21. Ui::MyDialog *ui;
  22. };
  23. #endif // MYDIALOG_H

2.源文件:

main.cpp文件:

  1. #include <QtGui/QApplication>
  2. #include "mainwindow.h"
  3. #include"mydialog.h"
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. MainWindow w;
  8. MyDialog dlg;
  9. dlg.show();
  10. //信号与槽之间进行关联
  11. QObject::connect(&dlg,SIGNAL(showmainwindow()),&w,SLOT(receivelogin()));
  12. QObject::connect(&w,SIGNAL(dlgshow()),&dlg,SLOT(receiveshow()));
  13. QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
  14. QObject::connect(&dlg,SIGNAL(quit()),&a,SLOT(quit()));
  15. return a.exec();
  16. }


mainwindow.cpp文件:

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include<QPushButton>
  4. #include<QHBoxLayout>
  5. MainWindow::MainWindow(QWidget *parent) :
  6. QMainWindow(parent),
  7. ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);//默认是类名
  10. setWindowTitle(tr("myMainWindow"));
  11. }
  12. MainWindow::~MainWindow()
  13. {
  14. delete ui;
  15. }
  16. void MainWindow::receivelogin()
  17. {
  18. this->show();//显示主窗口
  19. }
  20. void MainWindow::on_pushButton_clicked()
  21. {
  22. this->hide();//隐藏主窗口
  23. emit dlgshow();//发射显示登录对话框信号
  24. }
  25. void MainWindow::on_pushButton_2_clicked()
  26. {
  27. emit quit();//发射退出信号
  28. }


mydialog.cpp文件:

  1. #include "mydialog.h"
  2. #include "ui_mydialog.h"
  3. #include<QHBoxLayout>
  4. #include<mainwindow.h>
  5. MyDialog::MyDialog(QWidget *parent) :
  6. QDialog(parent),
  7. ui(new Ui::MyDialog)
  8. {
  9. ui->setupUi(this);
  10. }
  11. MyDialog::~MyDialog()
  12. {
  13. delete ui;
  14. }
  15. void MyDialog::on_pushButton_clicked()
  16. {
  17. this->hide();//隐藏登录对话框
  18. emit showmainwindow();//显示主窗口
  19. }
  20. void MyDialog::receiveshow()
  21. {
  22. this->show();//显示登录对话框
  23. }
  24. void MyDialog::on_pushButton_2_clicked()
  25. {
  26. emit quit();//发射退出信号
  27. }

3.ui文件(窗口设计)





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

作者:nineheadedbird


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/81347
推荐阅读
相关标签
  

闽ICP备14008679号