四、实现子窗体的按钮功能。

1、在显示时间的子窗体中,有两个默认的按钮,都还没有定义其功能,下面就来定义,无论单击哪个按钮,都将线束时钟显示的线程并关闭窗体。

2、在子窗体的可视化设计界面中,在窗体的按钮上点右键,选择“转到槽...”,如下图所示。

3、在弹出的对话框中选择“clicked(QAbstractButton*)”一项,如下图所示,单击“OK”按钮。

4、在开发环境会直接跳转到timedialog.cpp文件中,并已经填充好了on_buttonBox_clicked(QAbstractButton *button)函数的框架,在其中输入如下图所示的代码,并保存。

5、重复上面的步骤创建一个on_buttonBox_rejected()函数的框架(注意在上面的第3步中选择“rejected()”一项),然后在其中输入如下图所示的代码,并保存。

6、为了确保在直接关闭窗体时也结束线程,还得在关闭窗体的事件中执行线程终止的程序,要实现这一功能,需要在子窗体程序中添加关闭事件的函数,先在头文件timedialog.h中进行相关文件的包含及函数的声明,如下图所示。

7、 然后再打开timedialog.cpp文件,在其中加入一个关闭事件函数的相关代码,如下图所示。

8、上述程序中,无论单击“确定”、“取消”按钮或是直接关闭窗体,都将结束时间线程。这样做是为了确保在子窗体关闭时结束线程,否则会造成窗体虽然关闭了,但线程仍没结束,当再次打开子窗体时,又会新增一个线程,这样将导致系统资源的过度消耗。

五、实现主窗体的关闭通知功能。

1、有时在关闭窗体时,需要提示用户,让用户确认一下是否真要关闭程序,这就需要在窗体的关闭事件中使用消息框进行操作。

2、同前面关闭子窗体的事件一下,要在主窗体中新建关闭事件函数,先在头文件mainwindow.h中进行声明,如下图所示。

3、然后在主窗体程序文件mainwindow.cpp中,加入下面的代码。

void MainWindow::closeEvent(QCloseEvent *event)
{
switch (QMessageBox::information(this,QString::fromUtf8("确认"),QString::fromUtf8("确认要退出吗?"),QString::fromUtf8("确定"),QString::fromUtf8("取消"),0,1))
{
case 0:
event->accept(); //点击了确认按钮
break;
case 1:
event->ignore(); //点击了取消按钮
break;
default:
break;
}
}

4、完成后的样子如下图所示。

5、保存后运行程序,在关闭主窗体时就会弹出确认对话框,如下图所示。

六、 实现控件随窗体尺寸变化的功能。

1、在主窗体上放置一个textEdit控件,并把大小设置铺满当前窗体,如下图所示。

2、运行程序,并拉动主窗体边沿改变其大小,会发现里面的textEdit控件并未随着改变,如下图所示。

3、在Qt中,可通过整体布局来实现控件跟随窗体变化,但这里主要讨论程序方式,这样更为通用和灵活一些。先在头文件mainwindow.h中添加尺寸改变函数的声明,如下图所示。

4、然后在主窗体文件mainwindow.cpp中,加入下面的代码,如下图所示。

5、保存并运行程序,这时再拖动主窗体大小,会发现里面的textEdit控件也随之改变了。

七、实现窗体的自定义图标功能。

1、首先要准备一个自己的图标文件,这里使用一个QQ的小企鹅图标作为演示,把企鹅图标文件命名为myicon. ico并把它拷贝到工程所在的目录下。

2、单击“文件”->“新建文件或项目”,在弹出的对话框左边的“文件和类”下面选择“Qt”一项,然后在中间选择“Qt Resource File”,如下图所示,单击“Choose...”按钮。

3、在弹出的对话框中,给资源起个名称,这里输入“icon”,如下图所示,点击“下一步”。

4、接下来询问是否把新建的资源加入到项目中,这里默认加入,如下图所示,点击“完成”按钮。

5、完成后在左边可看见新加入的icon.qrc文件图标,在其上点右键,选择“Add Prefix...” ,如下图所示。

6、在弹出的对话框中,在第一行输入根目录“/”,如下图所示,然后点击“OK”按钮。

7、在弹出的对话框中选择“Yes to All”按钮,重载所有更新。然后再次在icon.qrc上点右键,选择“添加现有文件...”,然后选择刚才拷贝好的图标文件“myicon.ico” ,再次点击“Yes to All”按钮,完成后如下图所示。

8、在资源准备好了之后,就可以在窗体中引用该图标文件了。双击“mainwindow.ui”打开主窗体设计界面,在右边的属性中找到“windowicon”一项,并点击下拉箭头选择“选择资源...”,如下图所示。

9、在弹出的对话框中,双击左边的<resource root>,然后在右边选择企鹅图标,如下图所示,点击“OK”按钮。

10、保存好运行程序,可看见主窗体的图标已变成了企鹅,如下图所示。可用同样的方法为子窗体设置图标。

八、实现程序脱离开发环境运行。

1、以上程序是在Qt Creator中运行的,当程序开发完成后,需要脱离开发环境运行,下面讨论如何在Windows系统下运行。

2、先把程序由Debug方式更改为Release方式,在Qt Creator中那个用于运行的绿色三角形按钮上方,找到一个电脑图标并单击它,然后在它弹出的选项中选择“Release”,如下图所示。

3、等待它转变完成后,单击最下方的锤子图标进行构建(也可再次运行程序),完成后可在构建目录下发现多出一个Release目录,进入该目录就可看到可执行程序了(本例为untitled1.exe),至于构建目录在什么地方,这是在开发配置环境时确定的,单击左边的“项目”图标就可以看到,在本例中如下图所示。

4、单独一个可执行程序untitled1还不能运行,需要把Qt4相关的支持文件也要附带上,共有5个文件,分别是:QtCore4.dll、QtGui4.dll、libstdc++-6.dll、libgcc_s_dw2-1.dll和libwinpthread-1.dll。这5个动态链接库文件可在“Qt4.8.7/bin”目录中找到,把它们与刚才Release生成的可执行程序untitled1放在同一个目录下,untitled1就可以独立运行了。

Qt中的多窗体编程(续二)的更多相关文章

  1. Qt中2D绘图问题总结(二)----------坐标系统

    坐标系统 使用QPainter绘制时使用到逻辑坐标,然后转换成绘图设备的物理坐标. 逻辑坐标到物理坐标的映射由QPainter的worldTransform()函数.QPainter的viewport ...

  2. Qt中采用多线程实现Socket编程

    Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 本文介绍的是Qt中采用多线程Socket编程,由于工作的需要,开始 ...

  3. Windows平台下Qt中glut库的使用

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  4. QT中使用Glut库

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  5. Qt中QString、QByteArray、int、double之间转换

    最近写Qt中的tcp网络编程,Socke连接后,接受到的数据类型是字节型,这就涉及到了大量的类型转换,在网上辗转几辄,总算有了点结果,特此跟大家分享.好了,不废话,下面细说. 方法/步骤     1. ...

  6. Qt中的多线程编程

    http://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/ Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功 ...

  7. 在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

  8. QT中的SOCKET编程(QT-2.3.2)

    转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...

  9. c# WinForm窗体编程中对窗体程序设置快捷键

    c# WinForm窗体编程中对窗体程序设置快捷键http://www.cnblogs.com/bison1989/archive/2011/09/19/2180977.html /// <su ...

  10. 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二

    一张图搞定OAuth2.0   目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...

随机推荐

  1. jmeter 之修改报告取样间隔时间以及APDEX 区间设置

    1.取样间隔时间设置 在jmeter 生成的报告中取样间隔默认设置的是1分钟,而非1秒,故样本间的间隔为1分钟,如下图所示: 取样间隔时间可通过修改bin/user.properties配置文件实现自 ...

  2. 将git仓库从submodule转换为subtree

    三个脚本 Alexander Mikhailian cat .gitmodules |while read i do if [[ $i == \[submodule* ]]; then mpath=$ ...

  3. DVWA靶场——靶场搭建

    DVWA靶场搭建 一.phpstudy环境准备: 第一步:下载PHPstudy: 找到PHPstudy官网,下载windows版小皮面板,然后安装.官网下载地址:https://www.xp.cn/ ...

  4. Java学习记录:2022年1月13日(其二)

    Java学习记录:2022年1月13日(其二) ​ 摘要:本篇笔记主要记录了在设计类时的一些注意事项,类加载时类中各个部分的加载顺序以及继承和多态的知识. 目录 Java学习记录:2022年1月13日 ...

  5. Matplotlib学习笔记1 - 上手制作一些图表吧!

    Matplotlib学习笔记1 - 上手制作一些图表吧! Matplotlib是一个面向Python的,专注于数据可视化的模块. 快速上手 这是使用频率最高的几个模块,在接下来的程序中,都需要把它们作 ...

  6. 手把手教你使用HBuilderX调试项目-windows系统

    准备工作 一个可以运行的uniapp项目 HBuilderX工具 官方 IDE 下载地址 快速上手 step1: 安装 HBuilderX 官方 IDE 下载地址 step2: 双击运行HBuilde ...

  7. SpringCloud NetFlix学习

    SpringCloud NetFlix 遇到记录不完全的可以看看这个人的博客 学相伴SpringCloud 微服务架构的4个核心问题? 服务很多,客户端该怎么访问? 负载均衡.反向代理,用户请求的永远 ...

  8. 让 MSYS2 Bash 像 Git Bash 一样显示 Git 分支名称

    Git for Windows 的 Bash 有一个很实用的功能,如果当前目录处于 Git 仓库中,那么命令行中会显示当前 Git 分支的名称(见下图). 然而原版的 MSYS2 Bash 没有这个功 ...

  9. Stochastic Methods in Finance (1)

    Bootcamp Topics related to measure theory. 略去,详见测度论专栏中的文章 Expectations 令 \(X\) 为 \((\Omega, \mathcal ...

  10. 【LeetCode字符串#05】基于个人理解的KMP算法图解,以及应用到strStr()函数实现

    KMP算法(用于实现 strStr()) strStr()函数是用来在一个字符串中搜索是否存在另一个字符串的函数,其匹配字符串方式为KMP算法 KMP算法基础理论 假设有如下两个字符串 文本串 aab ...