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

多页面

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

  2. 窗口的显示和隐藏:

    一个窗体,比如logpage widget,继承QWidget

    QWidget::show(); 显示该窗体

    QWidget::hide(); 隐藏该窗体

  3. 页面间通信采用在main.cpp 中创建connect槽函数。

  4. 代码如下

cpp 复制代码
//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. 代码举例
cpp 复制代码
//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时间
代码展示
cpp 复制代码
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()); // 输出毫秒
}
相关推荐
C嘎嘎嵌入式开发2 小时前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11063 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
Vallelonga4 小时前
Rust 中的数组和数组切片引用
开发语言·rust
Kiri霧4 小时前
Rust模式匹配详解
开发语言·windows·rust
white-persist4 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
千里马-horse4 小时前
Async++ 源码分析8--partitioner.h
开发语言·c++·async++·partitioner
Lucis__5 小时前
再探类&对象——C++入门进阶
开发语言·c++
007php0075 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
lsx2024066 小时前
HTML 字符集
开发语言
很㗊6 小时前
C与C++---类型转换
c语言·开发语言