QT "Tick"小部件循环
QT "Tick" widget loop
我正在尝试理解在帧时更新小部件的正确方法。我要解决的具体问题是将计时器的剩余时间设置在标签上。
我创建并启动了计时器
MainTimer = new QTimer(this);
MainTimer->setSingleShot(true);
MainTimer->start(5000);
在QML上,我有一个标签UI_MaintimerLabel,我可以通过ui->UI_MainTimerLabel->setNum(int)
访问。
由于QTimer不提供OnTimerUpdate
信号或回调方法,我想我必须创建某种循环才能读取计时器的值并将其设置为标签。
我应该通过qthread吗?
QThread::create([&]() {
while(true)
{
ui->UI_RemainingTimer->setNum(MainTimer->remainingTime());
}
})->start();
(注意:我知道这不起作用,但这不是问题,因为我只是想理解这个概念)
我应该使用0时QTimer?
UpdateTimer = new QTimer(this);
//{binding the UpdateTimer end signal to a ui->UI_RemainingTimer->SetNum(MainTimer->RemainingTimer() function}
UpdateTimer->start(0);
我应该使用Qeventloop(但我还没有完全了解它们的正确用法是什么)?
我应该使用用户创建的" mytimerlabel"窗口小部件(在哪个虚拟覆盖方法?)?
?还是我听不懂的其他正确方法来管理框架时间更新?(尽管我正在尝试获得一般正确的方法,而不是该特定问题的解决方法)
预先感谢
是否有必要每时每刻更新GUI?不,每帧每30ms更新一次,因此适当的事情是更新一半的时间,即15毫秒。因此,通过计算在GUI中显示其剩余时间:
,将第二个计时器设置为该期间#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTimer main_timer;
main_timer.setSingleShot(true);
QTimer update_timer;
QLabel label;
label.setAlignment(Qt::AlignCenter);
label.resize(640, 480);
QObject::connect(&update_timer, &QTimer::timeout, [&main_timer, &update_timer, &label](){
int rem = main_timer.remainingTime();
if(rem <0){
label.setNum(0);
update_timer.stop();
}
else{
label.setNum(rem);
}
});
label.show();
main_timer.start(5000);
update_timer.start(15);
return a.exec();
}
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- QT "Tick"小部件循环