QT--多页面、定时器和日期时间数据

多页面

  1. widget.ui 负责实现一个页面; mian.cpp创建窗体对象,并监控上面的事件

  2. 窗口的显示和隐藏:
    一个窗体,比如logpage widget,继承QWidget
    QWidget::show(); 显示该窗体
    QWidget::hide(); 隐藏该窗体

  3. 页面间通信采用在main.cpp中创建connect槽函数。
    在这里插入图片描述

  4. 代码如下

//main.cpp
#include "widget.h"
#include "vice_form.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;vice_form vice;QObject::connect(&w,SIGNAL(logSuccessVistVice_formSignal(QString&,QString&)),&vice,SLOT(wlogSuccessVistVice_formSignalToSlot(QString&,QString&)));QObject::connect(&vice,SIGNAL(vice_formReturnWidgetSiganl()),&w,SLOT(vice_formReturnWidgetSiganlSlotFun()));w.show();return a.exec();
}//widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
public slots:void btnLogClickedSlotFun();void vice_formReturnWidgetSiganlSlotFun();
signals:void logSuccessVistVice_formSignal(QString&,QString&);
private:Ui::Widget *ui;};
#endif // WIDGET_H//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
#include<QMessageBox>
#include "vice_form.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->move(600,300);ui->lineName->setPlaceholderText("请输入姓名");ui->linePasswd->setPlaceholderText("请输入密码");ui->linePasswd->setEchoMode(QLineEdit::Password);ui->btnLog->setText("登录");connect(ui->btnLog,SIGNAL(clicked()),this,SLOT(btnLogClickedSlotFun()));
}Widget::~Widget()
{delete ui;
}void Widget::btnLogClickedSlotFun()
{QString name = ui->lineName->text();QString passwd=ui->linePasswd->text();this->hide();emit logSuccessVistVice_formSignal(name,passwd);}void Widget::vice_formReturnWidgetSiganlSlotFun()
{this->show();}//vice_form.h
#ifndef VICE_FORM_H
#define VICE_FORM_H#include <QWidget>namespace Ui {
class vice_form;
}class vice_form : public QWidget
{Q_OBJECTpublic:explicit vice_form(QWidget *parent = nullptr);~vice_form();
signals:void vice_formReturnWidgetSiganl();
public slots:void wlogSuccessVistVice_formSignalToSlot(QString&,QString&);private:Ui::vice_form *ui;
};#endif // VICE_FORM_H//vice_form.cpp
#include "vice_form.h"
#include "ui_vice_form.h"
#include<QMessageBox>
vice_form::vice_form(QWidget *parent) :QWidget(parent),ui(new Ui::vice_form)
{ui->setupUi(this);
}vice_form::~vice_form()
{delete ui;
}void vice_form::wlogSuccessVistVice_formSignalToSlot(QString &name, QString &passwd)
{if(name!="xiaowang"){//QMessageBox::StandardButton btn;//根据btn的值进行后续操作QMessageBox::information(this,"提醒","姓名不对喔",QMessageBox::Yes|QMessageBox::No);emit vice_formReturnWidgetSiganl();return;}if(passwd!="123456"){//QMessageBox::StandardButton btn;//根据btn的值进行后续操作QMessageBox::information(this,"提醒","密码不对喔",QMessageBox::Yes|QMessageBox::No);emit vice_formReturnWidgetSiganl();return;}this->show();
}

定时器QTimer

  1. QTimer 是软件定时器,其父类是QObject。QTimer 的主要功能是设置以毫秒为单位的定时周期,然后进行连续定时单次定时。启动定时器后,定时溢出时QTimer会发射timeout()
    信号,为timeout()信号关联槽函数就可以进行定时处理。
  2. 常用方法
函数含义
start(int msec)启动定时器,定时器会在每个 msec 毫秒后发出一次 timeout 信号。
stop()停止定时器。
setInterval(int msec)设置定时器的时间间隔为 msec 毫秒。
isActive()检查定时器是否正在运行。
  1. 代码举例
//widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
public slots:void timeoutSlotFun();private:Ui::Widget *ui;QTimer timer;
};
#endif // WIDGET_H//widget.cpp
#include "widget.h"
#include "ui_widget.h"// Widget 类的构造函数
Widget::Widget(QWidget *parent): QWidget(parent) // 调用基类 QWidget 的构造函数, ui(new Ui::Widget) // 初始化 UI 对象
{ui->setupUi(this); // 设置 UI 组件// 设置定时器精度为精确定时器timer.setTimerType(Qt::PreciseTimer);/** Qt::PreciseTimer:精确定时器,精度尽量保持在毫秒级。* Qt::CoarseTimer:粗糙定时器,定时误差尽量在定时周期值的5%以内。* Qt::VeryCoarseTimer:非常粗糙的定时器,精度保持在秒级。*/timer.start(100); // 启动定时器,每100毫秒触发一次// 连接定时器的 timeout 信号到 timeoutSlotFun 槽函数connect(&timer, SIGNAL(timeout()), this, SLOT(timeoutSlotFun()));
}// Widget 类的析构函数
Widget::~Widget()
{delete ui; // 删除 UI 对象,释放内存// QTimer 的内存由 QWidget 管理,不需要手动删除
}// 定时器超时处理函数
void Widget::timeoutSlotFun()
{static int a = 10; // 静态变量 a 用于记录计数值a++; // 计数器递增ui->label->setText("hello"); // 设置 QLabel 的文本为 "hello"ui->label->setText(QString("this is number: %1").arg(a)); // 更新 QLabel 的文本,显示当前计数值// 当计数器 a 达到500时,停止定时器if (a == 500) {timer.stop(); // 停止定时器}
}

日期时间数据

  • QTime:表示时间数据的类,时间数据如12:04:35。
  • QDate:表示日期数据的类,日期数据如2021-9-15。
  • QDateTime:表示日期时间数据的类,日期时间数据如2021-09-16 17:22:43。
QTime类
  1. QTime 是用于存储和操作时间数据的类,时间数据包含小时、分钟、秒、毫秒。QTime总是
    使用24小时制,不区分AM/PM。
  2. QTime::currentTime()可以获取系统的当前时间
  3. QTime TM1(1,1,1);//初始化设置时间为1时1分1秒
  4. QString str = TM1.toString(“HH:mm:ss”); // 将时间格式化为字符串
  5. 可以通过对时间变量.hour这种方法获得单独小时这种。
QDate类
  1. QDate 是用于存储和操作日期数据的类。日期数据包含年、月、日数据。
  2. QDate::currentDate()获取系统的当前日期创建一个QDate 变量。
  3. QString str= DT2.toString(“yyyy-MM-dd”); // 将时间格式化为字符串
QDateTime类
  1. QDateTime 是表示日期时间数据的类,包含日期数据和时间数据。QDateTime 综合了日期和
    时间的操作,很多函数与QDate和QTime的相似。
  2. QDateTime QDateTime::currentDateTime() //返回系统的当前日期时间,本地时间
    QDateTime QDateTime::currentDateTimeUtc() //返回系统的当前日期时间,UTC时间
代码展示
void Widget::on_btnDebugDateTime_clicked()
{// 获取当前的日期和时间QDateTime DT1 = QDateTime::currentDateTime();// 将日期和时间格式化为 "年-月-日 时:分:秒"QString str = DT1.toString("yyyy-MM-dd hh:mm:ss");qDebug("DT1= %s", str.toLocal8Bit().data()); // 输出当前的日期和时间// 获取日期部分QDate dt = DT1.date();str = dt.toString("yyyy-MM-dd"); // 将日期格式化为 "年-月-日"qDebug("DT1.date()= %s", str.toLocal8Bit().data()); // 输出日期部分// 获取时间部分QTime tm = DT1.time();str = tm.toString("hh:mm:ss zzz"); // 将时间格式化为 "时:分:秒 时区"qDebug("DT1.time()= %s", str.toLocal8Bit().data()); // 输出时间部分// 获取从 1970-01-01 到当前时间的秒数qint64 MS = DT1.toSecsSinceEpoch();qDebug("DT1.toSecsSinceEpoch()= %lld", MS); // 输出秒数MS += 120; // 增加 120 秒DT1.setSecsSinceEpoch(MS); // 设置新的时间str = DT1.toString("yyyy-MM-dd hh:mm:ss"); // 将更新后的时间格式化为 "年-月-日 时:分:秒"qDebug("DT1+120s= %s", str.toLocal8Bit().data()); // 输出更新后的时间
}void Widget::on_btnDebugDate_clicked()
{// 初始化日期为 2021年7月6日QDate DT1(2021, 7, 6);QString str = DT1.toString("yyyy-MM-dd"); // 将日期格式化为 "年-月-日"qDebug("DT1= %s", str.toLocal8Bit().data()); // 输出初始化的日期// 设置日期为 2021年8月25日QDate DT2;DT2.setDate(2021, 8, 25);str = DT2.toString("yyyy-MM-dd"); // 将新日期格式化为 "年-月-日"qDebug("DT2= %s", str.toLocal8Bit().data()); // 输出设置后的日期// 计算 DT2 和 DT1 之间的天数差qDebug("Days between DT2 and DT1= %d", DT2.daysTo(DT1)); // 输出两日期之间的天数// 获取当前日期DT2 = QDate::currentDate();str = DT2.toString("yyyy-MM-dd"); // 将当前日期格式化为 "年-月-日"qDebug("Current date= %s", str.toLocal8Bit().data()); // 输出当前日期// 输出当前日期的各个组成部分qDebug("Year= %d", DT2.year()); // 输出年份qDebug("Month= %d", DT2.month()); // 输出月份qDebug("Day= %d", DT2.day()); // 输出日期qDebug("Day of week= %d", DT2.dayOfWeek()); // 输出星期几(1 表示星期一,7 表示星期天)
}void Widget::on_btnDebugTime_clicked()
{// 定义并初始化时间为 13:24:05QTime TM1(13, 24, 5);QString str = TM1.toString("HH:mm:ss"); // 将时间格式化为 "时:分:秒"qDebug("Original time= %s", str.toLocal8Bit().data()); // 输出原始时间// 延后 150 秒QTime TM2 = TM1.addSecs(150);str = TM2.toString("HH:mm:ss"); // 将延后后的时间格式化为 "时:分:秒"qDebug("150s later, time= %s", str.toLocal8Bit().data()); // 输出延后后的时间// 获取当前时间TM2 = QTime::currentTime();str = TM2.toString("HH:mm:ss zzz"); // 将当前时间格式化为 "时:分:秒 时区"qDebug("Current time= %s", str.toLocal8Bit().data()); // 输出当前时间// 输出当前时间的各个组成部分qDebug("Hour= %d", TM2.hour()); // 输出小时qDebug("Minute= %d", TM2.minute()); // 输出分钟qDebug("Second= %d", TM2.second()); // 输出秒qDebug("MSecond= %d", TM2.msec()); // 输出毫秒
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ML练习】决策树

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、决策树算法概述 二、代码实现 代码目标&#xff1a;我们希望通过鸢尾花数据&#xff0c;训练一个决策树模型&#xff0c;之后应用该模型&#xff0c;可以…

STM32 CAN外设(基于STMF103C8T6)

STM32内置bxCAN外设&#xff08;CAN控制器)&#xff0c;支持CAN2.0A和2.0B&#xff0c;可以自动发送CAN报文和按照过滤器自动接收指定CAN报文&#xff0c;程序只需处理报文数据而无需关注总线的电平细节 波特率最高可达1兆位/秒3个可配置优先级的发送邮箱2个3级深度的接…

Java后端开发(十五)-- Ubuntu 开启activemq开机自启动功能

目录 1. 修改Wrapper.conf文件配置内容 2. 在/etc/systemd/system目录下创建activemq.service文件 3. 重启服务器,验证是否生效 4. 系统启动目标问题 操作环境: 1、Ubuntu 22.04.4 LTS (GNU/Linux 6.5.0-28-generic x86_64) 2、jdk17.0.11 3、apache-activemq-6.0.1 1. 修…

学习测试10-1自动化 python基础

下载python 要配置环境变量 进入Python的官方下载页面 http://www.python.org/download/安装PyCharm工具&#xff0c;网上可以下载&#xff0c;很多资源&#xff0c;也有免安装的版本&#xff0c;在网上找激活码 链接: https://pan.baidu.com/s/1Y6S_n3KbnjOdE9EDZ5nixw?pwdd…

CentOS 7 yum官方源失效

问题 2024年7月&#xff0c;官方对centos 7停止了维护&#xff0c;yum的源网址mirror.centos.org也已经无法访问。 在此情况下&#xff0c;无法正常使用yum进行安装和更新工具。 在尝试了更换阿里源之后&#xff0c;仍然有部分工具库无法访问。 通用解决方案 1. 打开/etc/y…

AWS Certified Developer Associate备考笔记

AWS Certified Developer Associate备考笔记 缓慢更新中&#xff0c;如果你也正在关注该考试&#xff0c;请点赞后评论感兴趣的章节&#xff0c;可加快我的更新速度 &#x1f603; 文章目录 AWS Certified Developer Associate备考笔记一、IAM二、EC2三、EC2 Instance Storage…

【WordPress插件】Media folder汉化版-媒体文件夹-v5.1.2

WP媒体文件夹(WP Media folder)是一个真正的节省图片加载时间的插件&#xff0c;你可以管理文件和图片&#xff0c;从本地WordPress媒体管理器。该插件还包括一个增强版的WordPress图库管理器&#xff0c;主题 NextGEN图库导入器。 【WordPress插件】Media folder汉化版-媒…

C++的STL简介

0.STL简介 C的STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;它提供了一套通用的类和函数模板&#xff0c;用于处理数据结构和算法。STL的主要组件包括&#xff1a; 容器分配器算法迭代器适配器仿函数 容器 容…

数据库系统概论:事务与并发一致性问题

随着网络应用的普及&#xff0c;数据库并发问题变得越来越重要。数据库并发指的是多个用户或进程同时访问和操作数据库的能力。它是数据库系统性能优化的重要方面&#xff0c;旨在提高系统的吞吐量和响应时间&#xff0c;以满足多用户同时访问数据库的需求。然而&#xff0c;这…

Linux NFS服务搭建及使用

一、NFS 服务器介绍 nfs &#xff08; Network File System &#xff09;即网络文件系统&#xff0c;其基于 UDP/IP使用 nfs 能够在不同计算机之间通过网络进行文件共享&#xff0c;能使使用者访问网络上其它计算机中的文件就像在访问自己的计算机一样。 二、NFS 服务器的特点 …

Websocket自动消息回复服务端工具

点击下载《Websocket自动消息回复服务端工具》 1. 前言 在进行Websocket开发时&#xff0c;前端小伙伴通常是和后端开发人员同步进行项目开发&#xff0c;经常会遇到后端开发人员接口还没开发完&#xff0c;也没有可以调试的环境&#xff0c;只能按照接口文档进行“脑回路开发…

d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法

d3d12.dll 文件缺失如何解决&#xff1f;它为什么会不见呢&#xff1f;今天&#xff0c;我们将探讨 d3d12.dll 文件的重要性、原因以及丢失时的解决策略。本文将全面介绍 d3d12.dll 文件&#xff0c;并提供五种修复丢失问题的方法。 d3d12.dll文件是什么的详细介绍 d3d12.dll …

vst 算法R语言手工实现 | Seurat4 筛选高变基因的算法

1. vst算法描述 &#xff08;1&#xff09;为什么需要矫正 image source: https://ouyanglab.com/singlecell/basic.html In this panel, we observe that there is a very strong positive relationship between a gene’s average expression and its observed variance. I…

OpenAI 推出 GPT-4o mini,一种更小、更便宜的人工智能模型

OpenAI 最近推出了新型人工智能模型 GPT-4o mini&#xff0c;以其较小体积和低成本受到关注。这款模型在文本和视觉推理任务上性能优越&#xff0c;且比现有小型模型更快、更经济。GPT-4o mini 已向开发者和消费者发布&#xff0c;企业用户将在下周获得访问权限。 喜好儿网 在…

入坑树莓派(2)——树莓派4B与手机蓝牙通信

入坑树莓派(2)——树莓派4B与手机蓝牙通信 1、引言 在入坑树莓派(1)中已经搞掂了可视化问题。现在继续开展下一步,尝试与手机通信,一开始是想弄wifi连接的,但发现基于wifi的APP比较难弄,为了降低开发的难度,又因为树莓派板子自带蓝牙模块,所以直接选用蓝牙连接手机…

LabVIEW多串口通信

随着现代工业控制对数据采集和处理效率的要求不断提升&#xff0c;传统的单串口通信已无法满足多通道数据传输与大规模数据存取的需求。开发一种基于LabVIEW的多串口通信及数据存储系统&#xff0c;以提升数据处理速度和存储效率&#xff0c;保障生产线的稳定运行显得尤为重要。…

数据结构之树的存储结构详解与示例(C/C++)

文章目录 树的存储结构1. 顺序存储结构2. 链式存储结构结论 树&#xff08;Tree&#xff09;是一种非常常见的数据结构&#xff0c;它模拟了一种层级或分支结构。树由节点&#xff08;或称为顶点&#xff09;组成&#xff0c;每个节点包含一个值&#xff0c;并且可能有多个子节…

SpringDoc2问题汇总

在项目中尝试使用SpringDoc进行文档生成&#xff0c;在使用过程中遇到一系列的问题加以记录. 1.引入依赖 只是单纯的使用SpringDoc的话不需要引入一些乱七八糟的依赖&#xff0c;如今各种增强和拓展依赖层出不穷&#xff0c;但是随着这些依赖的出现带来的不仅是增强&#xff0…

在学习使用LabVIEW的过程中,需要注意哪些问题?

在学习使用LabVIEW的过程中&#xff0c;需要注意以下问题&#xff1a; 1. 基础知识 图形化编程思维&#xff1a; LabVIEW采用图形化编程方式&#xff0c;与传统的文本编程语言有很大不同&#xff0c;需要适应这种新的编程思维方式。数据流概念&#xff1a; 理解LabVIEW的核心数…

服务器借助笔记本热点WIFI上网

一、同一局域网环境 1、当前环境&#xff0c;已有交换机组网环境&#xff0c;服务器已配置IP信息。 设备ip服务器125.10.100.12交换机125.10.100.0/24笔记本125.10.100.39 2、拓扑图 #mermaid-svg-D4moqMym9i0eeRBm {font-family:"trebuchet ms",verdana,arial,sa…