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

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. uniapp微信小程序返回上一页并刷新数据

    根据要求:详情页返回列表页时,要刷新列表页的数据,操作如下 @click="goBack" goBack{ let pages = getCurrentPages(); // 当前 ...

  2. android studio 写一个桌球简单页面

    首先: 保存素材图: 其次: 参考:https://blog.csdn.net/nanhaoluo23/article/details/111144033 一步一步来,导入素材我就卡住了,找不到 于是 ...

  3. flask_apscheduler

    网上很多文章包括官网给出来的,更多的是执行的函数和初始话app在同一文件 按照app 路由 模型类 视图 往下延申,项目已经成型,所以上述的方法不适用. (不用操心模型类与app互相导入的错误)下面分 ...

  4. python之路46 django request对象 form表单 pycharm连接数据库 ORM简介

    静态文件配置 1.编写一个用户登录页面 2.静态文件 不怎么经常变化的文件 主要针对html文件所使用的到的各种资源 css文件.js文件.img文件.第三方框架文件 django针对静态文件资源需要 ...

  5. Java类、对象以及(静态)方法的探讨

    大家好,这是我的第一篇博客.在这里我想跟大家分享一下Java最基础的Class and Object,也就是我们熟说的类和对象,以及对Java方法的探讨. 初学时的我因为没有对这里面的每一行代码思考透 ...

  6. 初始化一个GCP项目并用gcloud访问操作

    1 简介 谷歌云GCP(Google Cloud Platform)是由Google提供的云平台,还是为用户提供了许多免费的产品,还是可以尝试一下的.对于学习或者小项目,都可以使用. 2 创建一个新项 ...

  7. Lyndon Word 与 Lydon 分解

    \(\newcommand\m\mathbf\) \(\newcommand\t\texttt\) \(\text{By DaiRuiChen007}\) 约定: 对于两个字符串 \(S,T\),用 ...

  8. elasticsearch实现基于拼音搜索

    目录 1.背景 2.安装拼音分词器 3.拼音分词器提供的功能 4.简单测试一下拼音分词器 4.1 dsl 4.2 运行结果 5.es中分词器的组成 6.自定义一个分词器实现拼音和中文的搜索 1.创建m ...

  9. 自己的devc++的语法配置

    效果如下

  10. Quarkus入门体验,22ms启动一个Web服务

    简介 Quarkus是类似于Spring Boot的框架,可以方便大家进行Java开发.利用GraalVM的魔力,能更好的适应云原生的场景,极快的启动速度. 创建项目 在IDEA就直接有创建Quark ...