QT定时器,日期和时间

  • Post author:
  • Post category:其他


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;
}



版权声明:本文为hqb_newfarmer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。