目录

实现功能:

实现原理:

实现过程:

1、首先新建 Qt工程,工程名为 NewForm,Base class 选为 QWidget。建立好后工程文件列表如下图。

2、新建对话框类,如下图,在新建中,选择 Qt Designer Form Class(Qt设计师界面类)。

3、如下图,在 mydlg.ui 中拖入一个 Push Button,将其上的文本改为“进入主窗口”,在其属性窗口中将其 objectName 改为 enterBtn,在下面的 Signals and slots editor 中进行信号和槽的关联,其中,Sender(发送者) 设为 enterBtn,Signal(信号) 设为 clicked(),Receive (接收者)设为 myDlg,Slot (槽)设为 accept()。这样就实现了单击这个按钮使这个对话框关闭并发出 Accepted 信号的功能。下面我们将利用这个信号。(不知道位置请看序号)

4、修改主函数 main.cpp,如下:

5、如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择 go to slot(转到槽)。(双击该文件)

6、我们选择单击事件 clicked()

7、我们在弹出的槽函数中添加一句:

8、完成


实现功能:

程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出。当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口。

实现原理:

程序里我们先建立一个主工程,作为主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。

实现过程:

1、首先新建 Qt工程,工程名为 NewForm,Base class 选为 QWidget。建立好后工程文件列表如下图。

a、点击“文件”菜单,选择“新建文件或项目”,如下图:

b、按照下图选择模板:

c、设置工程名为:NewForm,修改工程路径,如下图

d、选择构建系统,如下图

e、选择基类为:QWidget,如下图

f、一路“下一步”,即可完成工程创建。如下图

2、新建对话框类,如下图,在新建中,选择 Qt Designer Form Class(Qt设计师界面类)。

a、新建窗口,鼠标右键选择“Add new..”,(或者点击“文件”菜单,选择“新建文件或项目”)

2、选择Qt-->Qt设计师界面类

c、选择界面模版: Dialog without Buttons。

d、填写类名:Mydlg

e、添加到项目中(多项目请勿弄错)。完成

3、如下图,在 mydlg.ui 中拖入一个 Push Button,将其上的文本改为“进入主窗口”,在其属性窗口中将其 objectName 改为 enterBtn,在下面的 Signals and slots editor 中进行信号和槽的关联,其中,Sender(发送者) 设为 enterBtn,Signal(信号) 设为 clicked(),Receive (接收者)设为 myDlg,Slot (槽)设为 accept()。这样就实现了单击这个按钮使这个对话框关闭并发出 Accepted 信号的功能。下面我们将利用这个信号。(不知道位置请看序号)

添加一组“Signals and slots editor ”后,

下拉选择即可(看不清可以把间距拉宽)

4、修改主函数 main.cpp,如下:

查找项目文件如下图:

#include <QtGui/QApplication>
#include “widget.h”
#include “mydlg.h” //加入头文件
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;mydlg my1; //建立自己新建的类的对象 my1if(my1.exec()==QDialog::Accepted) //利用 Accepted 信号判断 enterBtn 是否被按下{w.show(); //如果被按下,显示主窗口return a.exec(); //程序一直执行,直到主窗口关闭}else return 0; //如果没被按下,则不会进入主窗口,整个程序结束运行
}

5、如下图,在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择 go to slot(转到槽)。(双击该文件)

6、我们选择单击事件 clicked()

7、我们在弹出的槽函数中添加一句:

my2.show();
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{my2.show();
}

my2 为我们新建对话框类的另一个对象,但是 my2 我们还没有定义,所以在 widget.h 文件中添加相应代码,如下,先加入头文件,再加入 my2 的定义语句,这里我们将其放到 private里,因为一般的函数都放在 public 里,而变量都放在 private 里。

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "mydlg.h"        //包含头文件QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_clicked();private:Ui::Widget *ui;myDlg my2;    //对 my2 进行定义
};
#endif // WIDGET_H

8、完成

到这里,再运行程序,便能完成我们实验要求的功能了。整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。这个程序里我们实现了两类窗口打开的方式,一个是自身消失而后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的方法是不同的。

Qt 5.12 编写多窗口程序(新手手把手教学)相关推荐

  1. distiller的另一个实例正忙于启动_PYQT5学习(02):利用Qt Designer制作第一个窗口程序

    目标 利用Qt Designer设计窗口界面 使用PyUIC把Qt Designer生成的UI文件转换为py文件 使用转换生成的py文件 创建项目 启动启动pycharm并创建项目 这一环节在这里就不 ...

  2. Qt实现基本QMainWindow主窗口程序

    这个实验用Qt实现基本QMainWindow主窗口 先上实验效果图    打开一个文件,读取文件类容 详细步骤: 1.打开Qt creator新建MainWindow工程 右键工程名添加新文件,mai ...

  3. Windows下Qt编写Android应用程序的环境搭建记录

    目录 前言 配置开发环境 安装JDK1.8 安装SDK 安装NDK Qt配置OpenCV C++&Java混合编程 结语 前言 由于要在手机上实现一些应用,例如部署目标检测模型.添加单目测距定 ...

  4. 安装汇编环境,写一个最简单的窗口程序

    用汇编写一个窗口程序 1.安装汇编所需的环境 1.下载masm32 下载地址 可以安装到D:\masm32目录下 2.配置环境变量 include = D:\masm32\include lib = ...

  5. java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...

    解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...

  6. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

  7. 【转】Qt编写串口通信程序全程图文讲解

    Qt编写串口通信程序全程图文讲解 本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或 ...

  8. 用Qt 编写黑白棋程序

    用Qt 编写黑白棋程序 前言:这是继三天学习c++后,学习了两天Qt 做的项目. 软件设计开发流程: 瀑布模型: 可行性分析 时间: 共8天(其中前两天学习Qt3.1 与Qt4.3.5,中间编程,最后 ...

  9. Java黑皮书课后题第3章:**3.4(随机月份)编写一个随机产生1和12之间整数的程序,并根据数组1,2,3...显示对应的月份

    **3.4(随机月份)编写一个随机产生1和12之间整数的程序,并根据数组1,2,3...显示对应的月份 题目 题目描述 破题 代码 如何理解产生随机数 题目 题目描述 **3.4(随机月份)编写一个随 ...

最新文章

  1. HTML4 和 HTML5 的10个关键区别
  2. R语言exists函数检查数据对象是否存在实战
  3. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
  4. 2019-7-29 考试总结
  5. 注释驱动的 Spring cache 缓存介绍--转载
  6. 对话高博(一)| 机器码、Pascal,以及计算机学习的分形
  7. 程序员编程10大原则,请牢牢记住!
  8. 视频播放器+android,Android视频播放器
  9. -1在numpy重塑中是什么意思?
  10. python画图小猪佩奇_用Python代码画小猪佩奇 Python简直太神奇了
  11. Serilog输出日志到mysql_ASP.NET Core利用Docker ElasticSearch Kibana来记录日志
  12. vs2015安装qt5教程
  13. 做了一款股票复盘工具
  14. MIT JOS lab2内存管理实验记录
  15. 腾讯入股山东福瑞达生物,投前估值36亿元,再次加码医美赛道
  16. JSON-spirit用法
  17. Centos安装MegaCli
  18. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息
  19. php lotus notes,Lotus Notes 和 Domino Web Access 的比较
  20. Chrome广告屏蔽

热门文章

  1. HTML和CSS基础系列(一)
  2. sudo,普通用户的提权操作,越权跟踪
  3. 计算机控制双积分系统,双积分式ADC的原理及如何设计
  4. Xilinx推荐使用ODDR原语输出高质量时钟
  5. Eggjs笔记:egg-mongoose插件的集成,crud操作, 多表关联查询
  6. 利用MyBatis实现CRUD操作
  7. react中props详解
  8. mysql命令行配置
  9. 机器学习 - 随机森林 Random Forest
  10. Step to UEFI (137) 通过 BGRT 取得当前系统的 LOGO