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

news2024/12/24 22:12:33

多页面

  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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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_OBJECT

public:
    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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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:05
    QTime 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.coloradmin.cn/o/1937083.html

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

相关文章

socket 收发TCP/UDP

一、c 个人测试记录&#xff0c;有问题还请指出&#xff0c;谢谢 参考&#xff1a;C开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发_c udp使用什么库-CSDN博客 代码中Logger测试见文章&#xff1a; c中spdlog的使用/python中logger的使用-CSDN博客 1、main.cpp 收…

PE安装系统

前些天客户的电脑坏了,需要重装系统,我们的恢复光盘安装的时候,由于主板的原因,导致进入windows安装界面,鼠标键盘没有响应,自然也就无法正常安装了. 那我们只能换个方法,PE安装试试看,那么我们需要做哪些准备工作呢? 1.制作PE启动盘,网上很多制作工具,如""U启动,…

贪心算法总结(1)

一、贪心算法简介 常用方法&#xff1a;交换论证法、数学归纳法、反证法、分类讨论 二、柠檬水找零&#xff08;交换论证法&#xff09; . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool lemonadeChange(vector<int>& bills) {int five0,t…

蜂窝物联云平台:一站式服务,智能生活从此开始!

蜂窝云平台 一、PC端展示与管理 GIS地图整合 在GIS地图上精确展示地块&#xff0c;轻松点选查看详细设备信息、实时监控和控制功能&#xff0c;以及基地的全方位介绍。 个性化定制界面 界面布局与功能展示均可按需求定制&#xff0c;打造独一无二的用户体验。 数据集中看板 将…

html网页使用tesseract实现OCR文字识别

即在前端实现OCR文字识别 1.前端代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>OCR文字识别…

C/C++ json库

文章目录 一、介绍1.1 json 介绍 二、C/C json 库选型2.1 选型范围2.2 jsoncpp2.2.2 jsoncpp 编译和交叉编译 2.3 rapidjson2.4 nlohmann/json2.5 sonic-cpp 五、常见问题5.1 jsoncpp 中关于浮点数的控制和中文显示问题5.2 jsoncpp序列化double类型时精度损失问题的解决办法 一…

JavaWeb JavaScript ① JS简介

目录 一、HTML&CSS&JavaScript的作用 二、前后端关联标签——表单标签 1.form标签 2.input标签 3.get/post提交的差异 4.表单项标签 5.布局相关标签 块元素——div 行内元素——span 三、CSS 1.CSS引入方式 方式1 行内式 方式2 内嵌式 方式3 外部样式表 2.CSS选择器 元…

AWS Certified Developer Associate备考笔记

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

Spring Boot项目中使用MyBatis Generator (MBG) 自动生成Mapper文件

Spring Boot项目中使用MyBatis Generator (MBG) 自动生成Mapper文件可以很大程度上减少编码。本文着重介绍如何在实战中使用MGB自动生成Mapper文件 1. 添加MyBatis Generator依赖 在pom.xml中添加必要的依赖 <dependency><groupId>org.mybatis.spring.boot</…

【Python系列】Python 中的文件读取

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

秒懂设计模式--学习笔记(11)【结构型-享元模式】

目录 10、享元模式10.1 享元模式10.2 举例10.2.1 马赛克10.2.2 游戏地图&#xff08;以草原地图作为范例&#xff09; 10.3 总结 10、享元模式 10.1 享元模式 “享元”则是共享元件的意思享元模式的英文flyweight是轻量级的意思&#xff0c;这就意味着享元模式能使程序变得更…

Training for Stable Diffusion

Training for Stable Diffusion 笔记来源&#xff1a; 1.Denoising Diffusion Probabilistic Models 2.最大似然估计(Maximum likelihood estimation) 3.Understanding Maximum Likelihood Estimation 4.How to Solve ‘CUDA out of memory’ in PyTorch 1.1 Introduction 训…

FastBee物联网开源项目本地启动调试

一、本地环境准备 &#xff08;1&#xff09;Visual Studio Code&#xff08;启动前端项目&#xff09; &#xff08;2&#xff09;IntelliJ IDEA Community Edition &#xff08;启动后端项目&#xff09; &#xff08;3&#xff09;Navicat或者DBeaver&#xff08;用来操…

Godot学习笔记2——GDScript变量与函数

目录 一、代码编写界面 二、变量 三、函数 四、变量的类型 Godot使用的编程语言是GDS&#xff0c;语法上与python有些类似。 一、代码编写界面 在新建的Godot项目中&#xff0c;点击“创建根节点”中的“其他节点”&#xff0c;选择“Node”。 点击场景界面右上角的绿色…

【STM32】按键控制LED光敏传感器控制蜂鸣器(江科大)

一、按键控制LED LED.c #include "stm32f10x.h" // Device header/*** 函 数&#xff1a;LED初始化* 参 数&#xff1a;无* 返 回 值&#xff1a;无*/ void LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENAB…

此扩展在此工作区中被禁用,因为其被定义为在远程扩展主机中运行。

使用VScode打开代码时&#xff0c;无法跳转函数&#xff0c;不提示报错。 安装python时显示&#xff0c; 此扩展在此工作区中被禁用&#xff0c;因为其被定义为在远程扩展主机中运行。 解决方法&#xff1a; CtrlShiftP &#xff1a;键入trust &#xff0c;工作区&#xff…

空间计算新时代:Vision Pro引领AR/VR/MR市场变革

随着2024年第二季度的结束&#xff0c;空间计算领域的市场动态愈发引人关注。根据国际数据公司&#xff08;IDC&#xff09;的最新报告&#xff0c;我们见证了行业格局的重大变化&#xff0c;尤其是苹果Vision Pro的突出表现&#xff0c;以及AR/VR/MR设备市场的整体趋势。以下是…

LabVIEW软件开发的雷区在哪里?

在LabVIEW软件开发中&#xff0c;有几个需要注意的雷区&#xff0c;以避免常见的错误和提高开发效率&#xff1a; 1. 不良的代码结构 雷区&#xff1a;混乱的代码结构和不清晰的程序逻辑。 后果&#xff1a;导致难以维护和调试的代码&#xff0c;增加了错误和故障的风险。 …

无人机侦察:二维机扫雷达探测设备技术详解

二维机扫雷达探测设备采用机械扫描方式&#xff0c;通过天线在水平方向和垂直方向上的转动&#xff0c;实现对目标空域的全方位扫描。雷达发射机发射电磁波信号&#xff0c;遇到目标后产生反射&#xff0c;反射信号被雷达接收机接收并处理&#xff0c;进而得到目标的位置、速度…

搜维尔科技:【研究】动作捕捉加速游戏开发行业的发展

动作捕捉加速游戏开发行业的发展 Sunjata 的故事始于 2004 年&#xff0c;它将席卷乌干达视频游戏行业&#xff0c;然后席卷全世界。但首先&#xff0c;Klan Of The Kings 的小团队需要工具来实现他们的愿景。 漫画家兼非洲民间传说爱好者罗纳德卡伊马 (Ronald Kayima) 在将…