如何每秒调用一个更新qt小部件的函数

时间:2017-01-18 02:08:31

标签: c++ qt

我是qt开发新手并遇到问题。我想每1秒调用一次函数updateCompass,它会更新已在widget中绘制的罗盘值。

我需要知道如何以及在何处调用该函数。

3 个答案:

答案 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,请实现从QWindowQOpenGLWindow派生的类。然后,在更新功能结束时,调用requestUpdate https://doc.qt.io/qt-5/qwindow.html#requestUpdate

“ [有关更新功能的信息]这是一个插槽,可以将其连接到QTimer :: timeout()信号以执行动画。但是请注意,在现代OpenGL世界中,依靠它是一个更好的选择与显示器的垂直刷新率同步。” -来自https://doc.qt.io/qt-5/qopenglwindow.html