QT定时器,日期和时间

本文介绍了在QT中如何避免在槽函数和成员函数中使用死循环导致程序卡死的问题,提出了使用定时器和多线程的解决方案。详细讲解了QTimer的使用方法,包括创建、设置时间、启动和关闭。同时,文章还展示了QDate和QTime类如何获取和格式化当前日期及时间,并给出了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QT中槽函数和普通成员函数中都不要使用死循环,会导致QT程序卡死
   一定要使用死循环:
                  思路一:可以使用今天讲解的定时器
                  思路二:可以使用后面讲解的多线程
   1.定时器  QTimer
            (1)创建定时器对象
                    QTimer::QTimer(QObject *parent = nullptr)
                                   参数:parent --》this父窗口
           (2)设置定时时间
                    void setInterval(int msec)  
                                   参数:msec --》毫秒
           (3)启动定时器
                   void QTimer::start()
               重点:当超时时间到了,QTimer的对象会自动触发timeout()信号,程序员主动关联这个信号,在自定义的槽函数去实现定时器需要完成的代码即可
           (4)关闭定时器
                  void QTimer::stop()

   2.日期   QDate
           [static] QDate QDate::currentDate()
                       返回值:  QDate 表示当前系统的日期
           int QDate::year() const      //返回年
           int QDate::month() const  //返回月
           int QDate::day() const      //返回日
           QString QDate::toString(const QString &format) const  //把日期按照指定的格式转换
                       参数:format --》用字母d   M  y分别表示日,月,年

   3.时间   QTime      
           [static] QTime QTime::currentTime()
                       返回值: QTime表示当前系统的时间
           int QTime::hour() const      //返回小时
           int QTime::minute() const   //返回分钟
           int QTime::second() const  //返回秒
           QString QTime::toString(const QString &format) const
                       参数:format --》用字母h   m  s分别表示小时,分钟,秒

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置定时时间
    mytimer.setInterval(1000); //1秒
    //关联timeout信号
    connect(&mytimer,SIGNAL(timeout()),this,SLOT(fun()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

//启动定时器
void MainWindow::on_startbt_clicked()
{
      //错误思路--》不能使用死循环
//    while(1)
//    {
//        qDebug()<<"hello world";
//        //延时一秒
//        QThread::sleep(1);
//    }
    mytimer.start();
}
//定时器对应的槽函数
void MainWindow::fun()
{
    qDebug()<<"hello world";
}
//关闭定时器
void MainWindow::on_stopbt_clicked()
{
    mytimer.stop();
}
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    i=0;
    //把要显示的多张图片存放到容器QList中
    piclist.push_back("C:/Users/PC/Desktop/share/1.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/2.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/3.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/4.jpg");
    piclist.push_back("C:/Users/PC/Desktop/share/5.jpg");

    //设置定时时间
    mytimer.setInterval(1000);
    //关联timeout信号与槽函数
    connect(&mytimer,&QTimer::timeout,this,&MainWindow::fun);

}

MainWindow::~MainWindow()
{
    delete ui;
}

//启动定时器
void MainWindow::on_startbt_clicked()
{
    mytimer.start();
}

//定时器对应的槽函数
void MainWindow::fun()
{
   //在标签上显示图片
   QPixmap mymap(piclist.at(i));
   //调整图片的大小--》使之跟标签宽高保持一致
   mymap.scaled(ui->label->width(),ui->label->height());
   //让刚才的设置生效
   ui->label->setScaledContents(true);
   ui->label->setPixmap(mymap);
   if(i<4) //由于彭老师的容器中总共只有5张图片
       i++;
   else
       i=0;
}
//关闭定时器
void MainWindow::on_stopbt_clicked()
{
    mytimer.stop();
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDate>
#include <QTime>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置超时时间
    mytimer.setInterval(1000); //1秒
    //关联timeout信号
    connect(&mytimer,SIGNAL(timeout()),this,SLOT(fun()));
    //启动定时器
    mytimer.start();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::fun()
{
    //获取系统的日期
    QString str1=QDate::currentDate().toString("yyyy-MM-dd");
    //获取系统的时间
    QString str2=QTime::currentTime().toString("hh:mm:ss");
    ui->lcdNumber->display(str1);
    ui->lcdNumber_2->display(str2);
}

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDate>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //获取当前系统的日期
    QDate mydate=QDate::currentDate();
    //打印年月日
    qDebug()<<mydate.year();
    qDebug()<<mydate.month();
    qDebug()<<mydate.day();
    //把日期转换成指定格式
    qDebug()<<mydate.toString("yyyy-MM-dd");
    qDebug()<<mydate.toString("dd-MM-yyyy");
    qDebug()<<mydate.toString("yyyy-MMMM-dddd");

    //在数码管上显示当前日期
    ui->lcdNumber->display(mydate.toString("yyyy-MM-dd"));
    //ui->lcdNumber->display("ABCDEFGH"); 搞笑的有些字符无法显示
    //ui->lcdNumber->display("谢霆锋");    搞笑的有些字符无法显示

}

MainWindow::~MainWindow()
{
    delete ui;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值