我是qt开发新手并遇到问题。我想每1秒调用一次函数updateCompass,它会更新已在widget中绘制的罗盘值。
我需要知道如何以及在何处调用该函数。
答案 0 :(得分:4)
Qt有一个特定的方法可以使用QTimer
class。
它允许您创建一个计时器(单次或定期)并将其timeout
信号连接到您编织魔法所需的任何插槽(功能)。
事实上,该链接页面正好您需要用来执行所需功能的代码:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
这将导致您的update
函数每秒被调用一次(在Qt精确度等限制范围内)。
答案 1 :(得分:2)
示例,您的案例。
QTimer *timer = new QTimer(this);
QObject::connect(timer, SIGNAL(timeout()), this, SLOT(updateCompass()));
timer->start(1000);
每秒拨打updateCompass()
。
这些链接可能对您有所帮助。 QTimer& Using QTimer
答案 2 :(得分:0)
对于不关心更新频率(它可能会波动)的应用程序来说,QTimer是可以的。
例如,如果您制作一个OpenGL程序来更新每一帧以制作动画,则您希望将更新与监视器的刷新率(vsync)同步。
要使用vsync,请实现从QWindow
或QOpenGLWindow
派生的类。然后,在更新功能结束时,调用requestUpdate
https://doc.qt.io/qt-5/qwindow.html#requestUpdate
“ [有关更新功能的信息]这是一个插槽,可以将其连接到QTimer :: timeout()信号以执行动画。但是请注意,在现代OpenGL世界中,依靠它是一个更好的选择与显示器的垂直刷新率同步。” -来自https://doc.qt.io/qt-5/qopenglwindow.html