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