什么是最好/最可靠的排队方式 触发连接 在一个线程中不卡住gui?
例如。我有一个 QGraphicsScene,我可以在其中自由移动 QGraphicsItem。我想用当前的 Item 位置开始一个耗时的声明。但是一次计算就足够快,无法识别 gui 卡住。
所以,只需连接到 itemChange()
做完之后setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
太贵了: GUI 卡住 因为每一步都有新的计算。
我想将连接排队以触发,假设每 500 毫秒,而不是每次移动。 (或在 500 毫秒没有用户输入后)
最佳答案
创建一个 500ms 超时的计时器,设置为运行 expensiveCalculation
一次然后停止。
QTimer *t = new QTimer(this);
t->setInterval(500);
QObject::connect(t, &QTimer::timeout, t, &QTimer::stop);
QObject::connect(t, &QTimer::timeout, this, &expensiveCalculation);
现在连接
itemChanged
向其发出信号 start
投币口。每次触发信号时,这将启动或重新启动计时器。如果 500 毫秒内没有新事件出现,计时器就会关闭并执行 expensiveCalculation
.QObject::connect(item, &QGraphicsItem::itemChanged, t, &QTimer::start);
关于c++ - QT 队列触发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62016110/