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

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. adb devices出现offline解决方法

    出现offline或者error: more than one device/emulator问题: 解决方法: 输入命令: adb kill-server adb start-server adb ...

  2. python 之异常捕获及处理(try--except)

    在python中,至少有两类错误,一种是程序语法错误,一种是程序异常. 所谓的语法错误是指你未按规定格式书写导致的错误,如:定义函数时,括号后面要紧跟英文冒号,若缺失则不能识别与运行,并抛出 Synt ...

  3. TortoiseGit (小乌龟安装配置及使用)

    TortoiseGit 使用教程 (图文详解) 第一步 下载Git:下载地址:https://gitforwindows.org 第二步 下载TortoiseGit 以及 汉化包 (安装教程这里就不详 ...

  4. 手动解析word Table模块内容

    最近来了一个需求, 需要手动解析word ( 好处就是不需要安装office 以及不会有office解析的线程残留),然后就是可以自定义解析规则,比较方便 比如解析这个word里面的内容: 标题,表格 ...

  5. idea 函数名灰色

    idea被引用的方法名突然全部灰掉了 idea被引用的方法名突然全部灰掉了[已解决]_weixin_42554373的博客-CSDN博客_idea方法名灰色

  6. SSM框架——整合ssm

    SSM整合 1.准备工作 新建一个普通的Maven项目 建好所有需要的架构层 向pom.xml中导入所有的依赖 <!--MyBatis相关--> <dependency> &l ...

  7. [C#]从两个例子理解async/await

    1 例子1 输出的结果为: 可以看出执行的结果为:A--D--B--C--E. 我们再看下一个例子(注意,我们把代码中D和E的位置交换) 2 例子2 结果: 结果为:A--B--C--E--D 3 理 ...

  8. Java学习笔记:2022年1月6日

    Java学习笔记:2022年1月6日 摘要:不可变字符串为什么不可变?StringBuffer类与StringBuilder类,字符串操作拾遗,记事本原理,进制转化问题. 目录 Java学习笔记:20 ...

  9. CSP/S 2022 游寄

    初赛 HN 初赛分数线好像大 \(32\) 分左右,通过率极高!本人弱弱的拿了 \(60.5\) 分(周围的同学平均分 \(>80\).) Day -1 这一天晚上,我背了背 dijkstra, ...

  10. Java基础1-1-3—java基础语法(条件控制语句)

    3. 条件控制语句 3.1 流程控制语句-顺序结构 流程控制语句:通过一些语句,来控制程序的[执行流程] 流程控制语句分类: 顺序结构 分支结构(if,switch) 循环结构(for,while,d ...