【发布时间】:2019-04-20 02:56:43
【问题描述】:
我正在尝试了解在帧时更新小部件的正确方法。 我要解决的具体问题是在标签上设置计时器的剩余时间。
我创建并启动了计时器
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-timed QTimer 吗?
UpdateTimer = new QTimer(this);
//{binding the UpdateTimer end signal to a ui->UI_RemainingTimer->SetNum(MainTimer->RemainingTimer() function}
UpdateTimer->start(0);
我应该使用 QEventLoop(但我还没有完全理解它们的正确用法)吗?
我应该使用用户创建的可自我更新的“MyTimerLabel”小部件(在哪个虚拟覆盖方法中?)?
或者还有其他一些我无法理解的管理帧时间更新的正确方法吗? (不过,我试图获得一般正确的方法,而不是解决这个特定问题的方法)
提前致谢
【问题讨论】:
-
为什么不能只使用
QTimer::timeout信号? -
@G.M.你的意思是 MainTimer::timeout?它不是仅在 5000 毫秒后才被调用吗?我需要它来更新帧时间。或者你的意思是 0-timed-timer-method?
-
QTimer::timeout我指的是与QTimer类相关的信号。frame-time是什么意思?抱歉,但我对你想要达到的目标有点困惑。 -
我的具体问题是如何在 QLabel 上显示 MainTimer 的剩余时间,但一般问题是如何在 main-loop-time 中更新小部件