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

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. 微服务组件-----Spring Cloud Alibaba 注册中心Nacos的CP架构Raft协议分析

    前言 本篇幅是继  注册中心Nacos源码分析 的下半部分. 意义 [1]虽说大部分我们采用注册中心的时候考虑的都是AP架构,为什么呢?因为性能相对于CP架构来说更高,需要等待的时间更少[相对于CP架 ...

  2. Blazor组件自做十三: 使用 Video.js 在 Blazor 中播放视频

    Video.js 是一个具有大量功能的流行的视频和音频 JavaScript 库,今天我们试试集成到 Blazor . Blazor VideoPlayer 视频播放器 组件 示例 https://b ...

  3. openresty package path

    openresty lua_package_path 是整个openresty最基础的功能,不理解 path就无法做项目,更无法写框架. 先看下文档lua_package_path https://g ...

  4. “喜提”一个P2级故障—CMSGC太频繁,你知道这是什么鬼?

    大家好,我是陶朱公Boy. 背景 今天跟大家分享一个前几天在线上碰到的一个GC故障- "CMSGC太频繁". 不知道大家看到这条告警内容后,是什么感触?我当时是一脸懵逼的,一万个为 ...

  5. elasticsearch之metric聚合

    1.背景 此篇文章简单的记录一下 elasticsearch的metric聚合操作.比如求 平均值.最大值.最小值.求和.总计.去重总计等. 2.准备数据 2.1 准备mapping PUT /ind ...

  6. 【转载】【Word】项目编号应用样式后出现黑框的解决方案

    本文中的宏代码来自: https://www.zhihu.com/question/38985919 Word使用项目编号后,出现黑框,如下图所示: 网上大多数解决方案在重新打开文档后,依然还是有黑框 ...

  7. 快速体验,学习lua(一种可嵌入c++,c#,android,object-c等并进行互调支持热更新的脚本)的入门调试系列(3)

    --这里是注释 --[[ 功能备注:lua快速体验,学习,了解语法(调试,类似try-catch) 创建时间:2020-6-27 创建人:pcw --]] print("---------- ...

  8. [编程基础] Python对象的浅拷贝与深拷贝笔记

    Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...

  9. 迁移学习(MixMatch)《MixMatch: A Holistic Approach to Semi-Supervised Learning》

    论文信息 论文标题:MixMatch: A Holistic Approach to Semi-Supervised Learning论文作者:David Berthelot, Nicholas Ca ...

  10. [C++]bitwise和memberwise的区别

    在看<深入探索C++对象模型>这本书的时候,我看见了bitwise senimatics和memberwise senimatics,看的时候还不清楚这两个是什么意思,书本上直接使用的是英 ...