QObject组成
QObject主要分为两个部分
- startTimer() 开启定时器 参数是毫秒为单位的值(自己设宏定义)
- killTimer() 关闭定时器 直接关闭
开启定时器
可以通过按钮等控件开启定时器
void Widget::on_startButton_clicked()
{
myTimerId = this->startTimer(TIMEOUT);
}
- startTimer是最大基类QObject的方法 所以可以直接使用this调用,Widget继承于最大基类
- starTimer()参数为宏定义的时间 单位是毫秒
- 需要用值来存储函数返回的定时器ID号(myTimerId)
在头文件中声明定时器函数
virtual void timerEvent(QTimerEvent * event);
- 可以在widget.cpp中重写该函数
- QTimerEvent * event 是当前定时器的ID号
重写定时器函数
void Widget::timerEvent(QTimerEvent * event)
{
// 判断当前定时器id 是否与点击事件中保存的id一致
if(event->timerId() == myTimerId)
{
//记录下绝对路径的地址 只需修改图片文件名称
QString path("D:\\Qt online\\objectTimer\\");
//将int强制转换成QString类型
path += QString::number(picId);
path += ".png";
ui->label->setPixmap(path);
//设置最大值
picId++;
if(picId == 4) picId = 1;
};
}
- 需要先判断当前定时器的参数event的timerId()是否与开启定时器时获取的ID号相同
- 用QString类型来存储绝对路径
- 在绝对路径后面添加需要改变的图片名称
- 需要将int类型的图片ID强转成QString类型 并且添加到地址path中
- 调用label的内置函数setPixmap添加图片 参数为path
- 不断修改图片ID号 来切换图片
初始化label中的图片
//图片id
picId = 2;
// 设置初始图片
QPixmap pix("D:\\Qt online\\objectTimer\\1.png");
ui->label->setPixmap(pix);
- 初始化图片ID 不要与初始的图片名称中数字一致
- QPixmap是处理图像的一个类(这里使用QString一样可以)
- 调用label的内置函数setPixmap添加图片 参数为path
关闭定时器
void Widget::on_stopButton_clicked()
{
// 关闭定时器
this->killTimer(myTimerId);
}
- 调用killTimer() 参数为开始定时器时返回的ID号