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_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()); // 输出毫秒
}

相关推荐

  1. QT时间日期定时器

    2024-07-20 14:14:04       42 阅读
  2. Python 日期时间

    2024-07-20 14:14:04       26 阅读
  3. 【python】时间日期

    2024-07-20 14:14:04       25 阅读
  4. Julia 日期时间

    2024-07-20 14:14:04       18 阅读
  5. Python日期时间详解

    2024-07-20 14:14:04       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 14:14:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 14:14:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 14:14:04       45 阅读
  4. Python语言-面向对象

    2024-07-20 14:14:04       55 阅读

热门阅读

  1. tmp - configmap动态更新配置?

    2024-07-20 14:14:04       19 阅读
  2. ENSP常见命令及协议命令

    2024-07-20 14:14:04       19 阅读
  3. LeetCode 221. 最大正方形

    2024-07-20 14:14:04       18 阅读
  4. Vue中Key的作用

    2024-07-20 14:14:04       14 阅读
  5. VMware 虚拟机 ping 不通原因排查

    2024-07-20 14:14:04       21 阅读
  6. 数据响应式(Object.defineProperty和Proxy)

    2024-07-20 14:14:04       14 阅读
  7. 云计算的三种服务模式

    2024-07-20 14:14:04       18 阅读
  8. wps的xls文件,如何过滤掉空白没有数据的行

    2024-07-20 14:14:04       16 阅读
  9. Provider(5) - AdjustChannelsBufferProvider

    2024-07-20 14:14:04       17 阅读
  10. lua 游戏架构 之 SceneLoad场景加载(一)

    2024-07-20 14:14:04       19 阅读