Qt5--多窗口编程实例
来源:互联网 发布:上海迪士尼游客数据 编辑:程序博客网 时间:2024/05/16 02:29
- 登录后进入主窗口
- 主窗口打开对话框(自带的类无ui文件)
- 主窗口打开其他窗口(自定义的类+ui)
- 主窗口打开其他窗口并通信 (自定义的类+ui)
登录后进入主窗口
1、新建工程
(1)Crtl + N 新建工程
(2)取名window工程
2、往工程里面添加自定义类和ui文件
(1)在工程名字上面点击“Add New ….”
(2)这里可以随便选择,我选Dialog without Buttons。
(3)修改类名
(4)QtCreator自动把新建的窗口类信息添加进.pro工程配置文件中去
(5)工程中就有了文件了
(6)配置文件中也自动添加了
(7)设计登录界面
(8)配置登录界面的信号与槽:鼠标点击工具栏的按键,选择clicked(),accept()然后确定。
3、编写代码完成首先进入登录页面,按下按钮之后进入主窗口的逻辑
(1)window.h里面添加登录视图类的头文件
(2)main.cpp里面添加
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; LoginDlg dlg; if (dlg.exec() == QDialog::Accepted){//利用Accepted返回值判断按键是否被按下 w.show();// 如果被按下,显示主窗口 return a.exec();// 程序一直执行,直到主窗口关闭 } else return 0;//如果没有被按下,则不会进入主窗口,整个程序结束运行}
效果如动图
源码下载
主窗口打开对话框
代码继续沿用前面的。
(1)在主窗口的视图界面里面添加一个按键,然后使用信号与槽,打开一个对话框。
(2)在点击实现函数下写代码打开一个对话框
首先在window.h中添加对话框的头文件QDialog
然后在window.cpp中的点击实现函数实例化一个对话框。
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ QDialog *dlg = new QDialog(this); void MainWindow::on_pushButton_clicked(){ QDialog *dlg = new QDialog(this);// dlg->show(); // 可以连续打开多个,即父窗口可以点击 dlg->exec(); // 父窗口不可点击}
Qt里面还内置了很多对话框
- QColorDialog:选择颜色;
- QFileDialog:选择文件或者目录;
- QFontDialog:选择字体;
- QInputDialog:允许用户输入一个值,并将其值返回;
- QMessageBox:模态对话框,用于显示信息、询问问题等;
- QPageSetupDialog:为打印机提供纸张相关的选项;
- QPrintDialog:打印机配置;
- QPrintPreviewDialog:打印预览;
- QProgressDialog:显示操作过程。
比如QMessageBox的使用案例:
案例一:
void MainWindow::on_pushButton_clicked(){// QMessageBox *dlg = new QMessageBox(this); if (QMessageBox::Yes == QMessageBox::question(this, tr("Question"), tr("Are you OK?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) { QMessageBox::information(this, tr("Hmmm..."), tr("I'm glad to hear that!")); } else { QMessageBox::information(this, tr("Hmmm..."), tr("I'm sorry!")); }}
效果:
案例二:
{ QMessageBox msgBox; msgBox.setText(tr("The document has been modified.")); msgBox.setInformativeText(tr("Do you want to save your changes?")); msgBox.setDetailedText(tr("Differences here...")); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); int ret = msgBox.exec(); switch (ret) { case QMessageBox::Save: qDebug() << "Save document!"; break; case QMessageBox::Discard: qDebug() << "Discard changes!"; break; case QMessageBox::Cancel: qDebug() << "Close document!"; break;}
效果图:
主窗口打开其他窗口
代码继续使用前面的。
(1)在工程里面新建一个Qt设计表单类
在新的视图页面里面添加一段文字。
(2)编写逻辑代码
首先还是在window.h中添加新的视图类的头文件
然后在主窗口的视图页面里面添加一个按钮
打开新建的按钮的信号与槽函数并添加代码
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ QMessageBox msgBox; msgBox.setText(tr("The document has been modified.")); msgBox.setInformativeText(tr("Do you want to save your changes?")); msgBox.setDetailedText(tr("Differences here...")); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); int ret = msgBox.exec(); switch (ret) { case QMessageBox::Save: qDebug() << "Save document!"; break; case QMessageBox::Discard: qDebug() << "Discard changes!"; break; case QMessageBox::Cancel: qDebug() << "Close document!"; break; }}void MainWindow::on_pushButton_2_clicked(){ myForm *form = new myForm(this); form->exec(); // 打开另外一个窗口}
效果图:
主窗口打开其他窗口并通信
- 使用信号与槽
- 子窗口向父窗口传输数据
(1)子窗口的配置
(2)子窗口:myform.h—-增加传输数据的信号、按键响应的槽
#ifndef MYFORM_H#define MYFORM_H#include <QDialog>namespace Ui {class myForm;}class myForm : public QDialog{ Q_OBJECTpublic: explicit myForm(QWidget *parent = 0); ~myForm();signals: void sendData(QString); // 用来传输数据的信号private slots: void on_pushButton_clicked(); // 按键点击private: Ui::myForm *ui;};#endif // MYFORM_H
子窗口:myform.cpp—按键响应的实现
#include "myform.h"#include "ui_myform.h"myForm::myForm(QWidget *parent) : QDialog(parent), ui(new Ui::myForm){ ui->setupUi(this);}myForm::~myForm(){ delete ui;}void myForm::on_pushButton_clicked(){ emit sendData(ui->lineEdit->text()); //获取lineEdit的输入并且传递出去 this->close(); // 传输完毕之后关闭子窗口}
(3)主窗口的实现
视图的实现增加一个显示的textEdit
主窗口文件mainwindow.h—-增加了接收数据的槽
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include "logindlg.h"#include <QDialog>#include <QMessageBox>#include <QDebug>#include "myform.h"namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked(); void receiveData(QString data); //接收传递过来的数据的槽private: Ui::MainWindow *ui;};#endif // MAINWINDOW_H
mainwindow.cpp—–增加了信号与槽(数据传输的)实现函数,以及接收数据槽函数的实现
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); }MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked(){ QMessageBox msgBox; msgBox.setText(tr("The document has been modified.")); msgBox.setInformativeText(tr("Do you want to save your changes?")); msgBox.setDetailedText(tr("Differences here...")); msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Save); int ret = msgBox.exec(); switch (ret) { case QMessageBox::Save: qDebug() << "Save document!"; break; case QMessageBox::Discard: qDebug() << "Discard changes!"; break; case QMessageBox::Cancel: qDebug() << "Close document!"; break; }}void MainWindow::on_pushButton_2_clicked(){ myForm *form = new myForm(this); // 连接信号与槽 connect(form, SIGNAL(sendData(QString)), this, SLOT(receiveData(QString))); form->show();}void MainWindow::receiveData(QString data){ ui->textEdit->setText(data);}
效果图
下载链接
- Qt5--多窗口编程实例
- QT5 下udp 编程实例
- Qt5窗口设计
- Qt5窗口设计
- Qt5窗口背景
- Qt5.8 异形窗口
- Matlab实例学习--------不同界面的数据传递(多窗口编程)(实例)
- 【Qt5开发及实例】3、布局管理之分割窗口QSplitter
- 【Qt5开发及实例】4、布局管理之停靠窗口QDockWidget类
- 5-QT5多窗口切换以及所有对话框的实现
- Qt5基础(二)编写Qt多窗口程序笔记
- Qt5 操作 Sqlite3实例
- DX多窗口编程
- tkinter多窗口编程
- Qt5 弹出窗口的创建
- QT5设计VTK UI窗口
- QT5学习:窗口布局测试
- QT5 窗口标题显示中文
- python3爬虫攻略(7):爬虫案例
- 函数式编程初探
- 406. Queue Reconstruction by Height(M)
- C#初识继承
- Maven中pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true
- Qt5--多窗口编程实例
- linux centos7 redhat7 怎么设置开机自动进入命令行模式
- python_BeautifulSoup库之遍历文档树
- webpack打包工具的使用
- C# 事件(Event)
- javascript 自己自动执行的函数
- HDOJ 1043 康拓展开
- HDOJ 1056 HangOver
- 链接器脚本 .lds