在前面一节中,已经把所有需要的窗体都创建好了,下面将依次实现预设的功能。

一、实现点击菜单打开模式子窗体的功能。

1、在编辑模式下双击Forms下的“mainWindow.ui”,打开主窗体,在窗体下面的“Action Editor”标签页中会看到action和action_3两项,其中的action就是前面创建的操作菜单中的“时钟”一项,而action_3则是“退出”一项。这里缺了action_2项,因为它其实就是前面创建过的“分隔符”。在action上右键并选择“转到槽...”,如下图所示。

2、在打开的对话框中,选择QAction下的triggered()方法,如下图所示,点击“OK”按钮。

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

4、上图中的对象time还没有定义,在头文件Headers中双击“mainwindow.h”,打开该头文件,先在其中包含timedialog.h的头文件 ,然后在private下面加入time的定义并保存,如下图所示。

5、以同样的方式,再创建一个“退出”的槽函数on_action_3_triggered(),并在其中添加如下图所示的代码,以在点击“退出”时关闭整个程序。

6、完成后点击绿色三角形按钮运行程序,等待其编译完成,就可以看到运行起来的主窗体了,然后单击菜单“操作”->“时钟”,即可打开时间显示的子窗体了,如下图所示。点击“操作”->“退出”就可关闭程序。

上面的子窗体为模态子窗体,即在子窗体关闭前,主窗体不能被操作。若把前面程序中设置模态窗体的“time->setModal(true);”一句注释掉,则默认生成非模态的子窗体。

二、实现子窗体的加工美化。

1、设置子窗体的大小固定,并把标题栏上的问号按钮去除,然后把默认按键中改为中文的“确定”和“取消”,再把LCD Number进行一些美化等等,这些更改都在子窗体文件timeDialog.cpp中进行,如下图所示。

2、要使用buttonBox进行按钮配置,需要包含相应的头文件,打开timedialog.h文件,并在其中包含需要的头文件,如下图所示。

3、在子窗体的可视化设计界面中,把LCD Number控件拖动到合适的位置,并在右边的属性中找到“windowTitle”一项,把名称改为“时钟”,保存后运行程序,子窗体的显示效果如下图所示,此时的窗体边框不能被拖动,即不能更改窗体大小。

三、实现子窗体的实时时间显示功能。

1、 为了能实时显示时间又不增加系统资源的额外开销,需要把时间显示放在一个新建的线程中去。

2、新建线程文件,在项目中最顶端的untitiled1上点右键,选择“添加新文件...”一项,会弹出新建文件的对话框,在“文件和类”中选择C++,然后选择其中的“C++Source File”一项,如下图所示,点击“Choose...”按钮。

3、在弹出的对话框中,填入新建的线程程序文件名称,这里填入“timeshowthread”,如下图所示,点击“下一步”按钮。

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

5、重复上面的步骤,再新建一个配套的头文件timeshowthread.h(注意在上面的第2步中选择“C++Header File”一项), 全部完成后如下图所示。

6、在刚才新建的线程文件timeshowthread.cpp中,加入下面的代码。

#include "timeshowthread.h"
#include <QTime>
timeshowThread::timeshowThread()
{
}
void timeshowThread::run()
{
while(1)
{
QDateTime current_date_time = QDateTime::currentDateTime(); //获取系统当前时间
// QString current_week = current_date_time.toString("ddd");
// QString current_date = current_date_time.toString("yyyy.MM.dd");
QString current_time = current_date_time.toString("hh:mm:ss"); //格式化为 QString
emit sendTime(current_time); //发射信号
msleep(100);
}
}

7、在配置的头文件timeshowthread.h中,加入如下的相关定义。

#ifndef TIMESHOWTHREAD_H
#define TIMESHOWTHREAD_H #include <QThread>
#include <QString>
class timeshowThread : public QThread
{
Q_OBJECT
public:
timeshowThread();
signals:
void sendTime(QString);
protected:
void run();
public slots:
}; #endif // TIMESHOWTHREAD_H

8、线程文件准备好后,就可在子窗体程序timedialog.cpp中调用了。首先在头文件timedialog.h中加入线程对象和槽函数的相关定义,如下图所示。

9、在timedialog.cpp的主函数的末尾处,添加下面的代码以连接槽函数及启用线程。

TimeshowThread = new timeshowThread;            //新建时间处理线程
connect(TimeshowThread, SIGNAL(sendTime(QString)), this, SLOT(DisplayTime(QString))); //连接显示槽函数
TimeshowThread->start(); //启动线程

10、同时在timedialog.cpp的末尾处,添加下面的槽函数。

void timeDialog::DisplayTime(QString time)      //时间显示槽函数
{
ui->lcdNumber->display(time);
}

11、全部添加完成后的样子如下图所示。

12、保存后运行程序,时间显示子窗体将会实时显示系统的当前时间,如下图所示。

最新文章

  1. get------引用接口
  2. webpack 教程 那些事儿06-gulp+webpack多页
  3. jd-gui 反编译后去除注释
  4. C# 学习之旅(2)--- 意外的收获
  5. spring session工程发布--一种新的管理httpsession的方法
  6. building system busy, pls wait !!
  7. 解决IOS safari在input focus弹出输入法时不支持position fixed的问题
  8. jQuery星级评分插件
  9. NCS8801S芯片RGB/LVDS转EDP功能简介
  10. 对datatable进行简单的操作
  11. itest 开源测试管理项目中封装的下拉列表小组件:实现下拉列表使用者前后端0行代码
  12. Depp Learning note Day1
  13. [转]Windows下Python多版本共存
  14. 编写高质量代码:改善Java程序的151个建议 --[106~117]
  15. css实现右侧固定宽度,左侧宽度自适应
  16. zookeeper(4)--zookeeper分布式锁原理
  17. 20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析
  18. Python3基础 str split 用指定的字符将字符串分割
  19. [转载]Deep Learning(深度学习)学习笔记整理
  20. 转:PHP中的使用curl发送请求(GET请求和POST请求)

热门文章

  1. global与nonlocal、函数名用法、闭包函数、装饰器
  2. python 之 random.sample() 报ValueError: Sample larger than population or is negative
  3. CH32V307以太网(芯片内部10M)-针对新固件的Lib库
  4. nacos注册中心单节点ap架构源码解析
  5. (3)go-micro微服务项目搭建
  6. 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!
  7. py教学之字典
  8. Echarts点击多组数据多个柱子中的一个柱子,获取当前点击的是第几组数据,并获取点击的是当前组别第几根柱子,以及对应横坐标,
  9. Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理
  10. Ceph RGW误删index对象恢复