问题标签 [qtimer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3324 浏览

c++ - 多线程应用程序中的 QTimer

好的,所以我完全迷失在 QTimer 中。问题是:我有多线程应用程序,我需要对 QTimer 的超时做一些工作。我已经这样做了:

这没有用。有时,work() 根本没有被调用,有时在我关闭程序时被调用,有时一切看起来都很正常。
所以我开始想到计时器需要线程。提供 MCV 示例:

这个例子什么也没做。它没有打招呼,所以没有调用超时,也没有结束,所以线程没有停止。所以问题是:
1. 这段代码有什么问题?
2.如何在多线程环境中正确使用QTimer?

0 投票
3 回答
29362 浏览

c++ - 不能从另一个线程停止 Qt 计时器

嗨,

我正在编写我的第一个 Qt 程序,但现在遇到了以下问题:

QObject::killTimer:定时器不能从另一个线程停止

QObject::startTimer:定时器不能从另一个线程启动

我的程序将与 CANOpen 总线通信,因为我正在使用Canfestival Stack。Canfestival 将使用回调方法。为了检测通信超时,我设置了一个定时器功能(有点像看门狗)。我的计时器包由一个“tmr”模块、一个“TimerForFWUpgrade”模块和一个“SingleTimer”模块组成。“tmr”模块最初是用 C 语言编写的,因此静态“TimerForFWUpgrade”方法将与它连接。“tmr”模块将是 C 编程固件更新包的一部分。

计时器将按如下方式工作。在发送消息之前,我将调用 TMR_Set 方法。然后在我的带有 TMR_IsElapsed 的空闲程序循环中,我们检查计时器下溢。如果 TMR_IsElapsed 我将进行错误处理。如您所见,TMR_Set 方法将被连续调用并一次又一次地重新启动 QTimer。

如果我启动我的程序,就会出现上述错误。你能告诉我我的概念是否可行吗?为什么会出现这个错误?我必须对主线程使用附加线程(QThread)吗?

谢谢

马特

运行和空闲循环:

模块 tmr(C 程序的接口):

模块 TimerForFWUpgrade:

模块单定时器:

0 投票
1 回答
888 浏览

qt5 - 如何在 Qt5 中触发 QTableView 的重绘?

我已经实现了一个简单的QAbstractTableModel并将其附加到QTableViewQt5 中。如何从计时器触发重绘?数据每秒都在变化?

我天真的尝试不起作用(没有重绘发生):

0 投票
1 回答
516 浏览

c++ - Qt GUI - 仅在值更改时才想从 .txt 文件中读取

我已经实现了一个 QTimer 对象来指示一个函数,该函数每秒从 .txt 文件中读取并创建另一个类的新对象。我的问题是我想将我的函数限制为仅创建 1 个对象并继续检查 .txt 文件是否有任何更改。如何才能做到这一点?

下面是每秒执行的代码

0 投票
0 回答
60 浏览

multithreading - QTimer 使用 main 而不是 Parralel 顺序运行

我一直在为不同的学生代码设置一个测试模拟器。它需要在学生代码期间间歇性地模拟机器人的运动代码。因此,无论学生代码期间发生了什么,它可能每 50 毫秒都会运行一个传感器功能和一个运动功能(稍后优化时间)。我写了一堆应该创建正确线程等的代码,但是一个代码总是最终等待另一个代码。然后我只简化到基础,但无论我使用什么设置,代码都会按顺序运行。我的代码和输出以我可以放入的最简单的方式在下面。

定时器类:

主类:

我希望这段代码打印很多“计时器执行”,并带有间歇性的消息“睡眠”实例,而不是我得到:

0 投票
1 回答
1221 浏览

qt - 手动重新启动计时器后奇怪的未记录 QTimer/QEventLoop 行为

我最近在使用调用具有内部 QEventLoop 的函数的 QTimer 时偶然发现了这一点

所以,假设我们有一个 QTimer 实例

我们在构造函数的某个地方启动它,它每 100 毫秒开始计时一次

现在是有趣的部分,我们将它连接到具有内部 QEventLoop 的插槽

抛开这个循环有多愚蠢,我们看到我们永远不会完成对插槽的处理,并且计时器的后续超时将继续堆积到执行队列中。一切都很好,应该是这样。

接下来不应该出现的情况是:由于 QEventLoop 确保我们的应用程序在插槽无意识地闲置时保持响应,我们可以制作一个按钮及其 clicked() 插槽,如下所示:

我在这里所做的基本上是重新启动当前的计时器周期,仅此而已。对?没有!重新启动后,SlotFunction再次触发,表明计时器重新启动后的滴答实际上并不等于在它之前发出的所有其他滴答...

我唯一的问题是:WTF?!为什么手动重新启动计时器可以使其进入插槽附加时间?我在freenode上问过,但我得到的唯一答案是“它应该是”

0 投票
5 回答
18424 浏览

python - 关闭应用程序时多次出现错误“QObject::startTimer: QTimer can only be used with threads started with QThread”

我知道这已经被问过很多次了。我阅读了所有这些主题,我的情况似乎有所不同。遇到此问题的其他所有人都有一些我认为我已经排除的直接原因,例如:

  • 启动没有事件循环运行的计时器
  • 从创建定时器的线程以外的线程启动/停止定时器
  • 未能设置小部件的父属性,导致破坏顺序出现问题

下面我有一个演示问题的最小代码示例。请注意,我没有启动任何线程或计时器。我还设置了每个小部件的父级。如果我删除图形小部件,问题就会消失,所以有人很想责怪 pyQtGraph,但是,如果我包含绘图小部件但排除所有空白选项卡(即除了 tabCatchaTiger 之外的每个选项卡),问题也会消失,并且似乎证明 pyQtGraph 是正确的。

版本:

  • Windows 7的
  • Python 2.7.8
  • 翼IDE 5.0.9-1
  • PyQt 4.11.1
  • PyQwt 5.2.1
  • PyQtGraph 0.9.8

测试用例:

0 投票
0 回答
600 浏览

c++ - Qt C++ Help Showing a Moving Image using PixMap

I'm using Qt in c++ to code plants z zombies which involves me moving things across the screen. To do that, I'm using QTimer which I've connected to the advance() function.

I'm able to get my object to move (using qDebug and seeing the coordinates) but I don't physically see the picture change unless I refresh the screen or switch windows (e.g. pressing alt tab twice or clicking the windows key button)

This is an example of one of my classes. Here I'm trying to get my peas move across the screen.

along with the corresponding cpp file

0 投票
3 回答
1721 浏览

c++ - 在 Qt/C++ 中替代睡眠功能

所以我正在编写一个程序,显示一个单词的每个字母 1 秒,字母之间有 1 秒的间隔。(这是一年级的拼写练习)。我目前正在使用睡眠功能将程序“暂停”1 秒钟,然后再次“更新”。之后,它会显示该单词一秒钟,然后将其删除。我在睡眠功能之前重绘,否则它似乎没有及时更新。

这是基本功能:

这工作正常,除了程序停止响应(即使我可以看到仍然显示正确的输出),直到整个函数执行完毕,然后它再次正常工作。有没有另一种方法可以在不使用睡眠的情况下实现这个目标?我对 Qt 很陌生。

我做的更新。我创建了一个新类来处理计时器,但它似乎并没有真正连接信号和插槽。这是.h文件:

和 .cpp 文件:

0 投票
1 回答
961 浏览

python - QTimer 和 QThread 奇怪的行为

输出:

请解释为什么 alarm_goes1 不执行。我怎样才能让它做到这一点?


编辑:

两个self.exec_()计时器都可以正常工作,但 while 循环内的部分不会。没有self.exec_(),只有一个计时器工作,但 while 循环将工作。

我希望计时器和 while 循环一起工作。

我尝试移动self.exec_()while循环内部,但它只会运行一次。