c++ - QT 队列触发连接

标签 c++ qt signals-slots

什么是最好/最可靠的排队方式 触发连接 在一个线程中不卡住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/

相关文章:

c++ - C++中的访问冲突错误

c++ - std::mutex 初始化异常

c++ - 取消引用类型双关指针将打破严格的别名规则 [-Wstrict-aliasing]

c++ - Qt QSettings 尝试创建 ini 文件但没有创建为什么?

c++ - Qt 和 C++ - 未定义的插槽引用

c++ - gcc -fdiagnostics-colour 是否在 Windows 上运行?

c++ - 在 Qt 中创建和存储调查

qt - 如何在 Qt 项目文件中指定对象目录?

Qt 信号到特定对象的插槽

python - PyQt4:使用 QTimer 不断更新进度条