【Qt编程】Qt学习之窗口间的相互切换
2014-03-15 10:49
309 查看
在用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(),在该函数中我们应该显示登录对话框。
具体的程序实现如下:
mydialog.h文件:
mainwindow.cpp文件:
mydialog.cpp文件:
![](http://img.blog.csdn.net/20140315104739812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20140315104758718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
原文:/article/1509085.html
作者:nineheadedbird
工程建立及功能描述:
首先,我们建立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文件:#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文件:
#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文件(窗口设计)
原文:/article/1509085.html
作者:nineheadedbird
相关文章推荐
- 【Qt编程】Qt学习之窗口间的相互切换
- QT学习笔记----窗口的相互切换
- QT 主窗口和子窗口相互切换示例
- Qt界面编程之多窗口切换
- QT学习笔记----QT多窗口编程
- Qt学习笔记--窗口部件(Widget)
- windows编程学习笔记(1)创建窗口与消息循环
- Qt中切换窗口功能的实现
- javascript中相互横向切换展示的窗口效果
- QT 窗口之间跳转切换
- 编程苦手GW——OpenGL学习练习,相互碰撞的彩色小球
- Qt编程学习经验
- QT中窗口刷新事件的学习总结
- 用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口
- Qt学习笔记--窗口部件(Widget)
- QT学习记录二 (windows窗口创建过程)
- QT编程技巧.QString和QDateTime之间的相互转换
- QT 编程学习记录のUDP文件传输
- Qt学习之三:创建主窗口
- Qt学习笔记--窗口部件(Widget)