问题标签 [qeventloop]

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 投票
2 回答
145 浏览

c++ - Qt 或任何其他语言。事件循环

我是 Qt 平台上的 C++ 程序员。

我想知道,事件循环如何“知道”向哪个小部件发送事件,主要是鼠标/键盘事件?它是基于鼠标坐标和z-order完成的吗?来自键盘的事件呢?

谢谢

0 投票
1 回答
1682 浏览

c++ - QTimer->remainingTime() 返回 -1371648957

当我使用 Qt 5.3.2 运行以下代码时,剩余时间设置为 -1371648957。

如果我之后继续在循环中打印剩余时间,负值只会增加,因此timeout()永远不会被触发。这对我来说真的没有意义。

为了提供一些上下文,这段代码在一个单独的线程中运行,并且 QTimer 不是在线程对象的构造函数中创建的。

这是一些更新的代码,可以使事情更清楚。

我已经检查了计时器创建是否在单独的线程中正确运行,并且线程内的 Qts 事件循环正在工作,因为我可以emit发出信号表明主线程接收。

如果我这样设置计时器也没有区别

如果我将秒数更改为 100000 或 0,则剩余时间只会略微更改为 -1374002988,但当我重新启动应用程序时它仍然会发生这种情况,但长度保持不变。

我还检查了timer->remainingTime()在线调试器,内部inter变量正确设置为 100。

这可能是一个内存地址或类似的东西吗?

0 投票
2 回答
1718 浏览

qt - Qt:多线程 DLL 设计

简介 这是一个开放式问题,我认为这可能对社区有益,因为我一直无法找到与此相关的出色文档。不幸的是,我学到了在 Qt 中实现 DLL 与在其他语言中不同的艰难方式,稍后我将解释

问题陈述 在 Qt 中实现一个非 Qt 应用程序可以轻松使用的多线程 DLL

背景资料

Qt 是首选工具,因为它固有的跨平台兼容性 API 利用回调函数来告诉调用应用程序何时发生某些事件

假设

- 将链接到 Qt dll 的应用程序与 Qt 编译器兼容(c/c++ -mingw,C# -msvc) - 信号/插槽用于从主线程到工作线程进行通信(例如,告诉工作线程收集数据)以及从工作线程返回到主线程(例如,通过回调函数通知主线程数据收集已完成)

问题描述

由于 Qt 的体系结构,我了解到在 QT 中编写多线程 DLL 与其他语言不同。由于 QT 事件循环处理生成线程、计时器、发送信号和接收槽,会出现问题。当主应用程序是 Qt(Qt 可以访问 QT 特定库)时,可以从主应用程序调用此 Qt 偶数循环(QApplication.exec())。但是,当调用应用程序不是 Qt 时,例如 C#,调用应用程序(也称为主线程)因此无法调用 Qt 特定的库,因此有必要设计您的 DLL,并在其中嵌入事件循环. 重要的是,这在设计中被预先考虑,因为以后很难硬塞它,因为 QApplication.exec 是阻塞的。

简而言之,我正在寻找关于在 Qt 中构建多线程 dll 以使其与非 QT 应用程序兼容的最佳方法的意见。

总之

  • 事件循环驻留在整体架构中的什么位置?
  • 关于信号/插槽,您应该考虑哪些特别事项?
  • 在实施类似于我所描述的内容时,社区是否遇到过任何问题?
0 投票
1 回答
3282 浏览

qt - How to use QTimer singleShot with QEventLoop in Qt

I need to open QDialog by using QTimer singleShot and wait for a status flag. If this variable is true then continue.

This is my code

StatusFlag = FALSE;

In NewGUI constructor StatusFlag is set to TRUE

Current Output is

Expected Output is

If i comment the line

QTimer::singleShot(0, this, SLOT(OpenWindow()));

Then the output is

Do you have any suggestion?

0 投票
2 回答
20966 浏览

qt - QEventLoop 正确使用

我有疑问我应该如何使用QEventLoop. 我有 2 段代码,它们都为我工作(下载网络资源)。

第一:

第二个:

我想知道我应该使用哪一个。我的意思是,在发出信号后,事件循环是否会在第二个中退出?还是我必须quit()像第一个一样打电话?我在某处找到了第二个解决方案,但对我来说似乎不合适,所以我将其修改为第一段代码。

0 投票
2 回答
684 浏览

c++ - 我的代码在 Qt Eventloop 启动之前如何接收信号

我试图理解为什么不需要在我的 QProcess waitForFinished() 和 waitForStarted() 调用可以工作之前将 a.exec() 调用放入以下 ​​Qt 4.8 代码中。我知道 a.exec() 启动事件循环,在我看来,waitFor* 插槽需要在继续执行之前接收信号(即 'started()' 或 'finished()' )。如果事件循环尚未启动,怎么会发生这种情况?

waitForStarted() 的文档:

代码:

0 投票
2 回答
1321 浏览

timeout - QTimer 不触发(触发)超时

我想使用 Qtimer 来暂停执行给定的代码块,而在另一个线程中它会执行其他操作。我用 qeventloop quit 连接了线程的超时,但问题是,没有调用超时。当另一个发射发生时,超时被神奇地触发,或者如果我添加另一个连接,超时也会被触发。我想我错过了关于使用 qtimer、qeventloop 和 qthread 的一些东西。任何人都可以帮忙吗?我提取了用于测试的基本代码并将其放在这里:

主文件

时间

时间.cpp

//用于测试widget.h的gui

小部件.cpp

0 投票
1 回答
1807 浏览

c++ - QEventLoop 已经调用了 exec() 即使之前使用了 exit()

我有一个通过 myfuntion 点击​​连接的按钮,见下文。

我正在使用 QEventLoop 因为我正在等待一个事件,它将调用 _myEventLoop.exit(0);

当我连续两次单击按钮而不等待事件发生时,我收到错误消息:

我在调用 exec() 之前调用了 exit(1),但似乎这个 exit 立即返回,然后函数通过 exec(),因为它仍在运行 return 1,myfunction 返回,然后只有第一个 exec()返回 1。

在继续之前,我如何确定先前对 exec() 的调用已返回?

0 投票
0 回答
365 浏览

c++ - QMessageBox .gif file is not visible

I have a QMessageBox and I put an animated gif on this Dialog with QLabel and inside QMovie instead of an icon. But there is a problem with the gif. When I refresh the screen somehow QMessageBox is working but the gif is not visible anymore.

0 投票
1 回答
5553 浏览

c++ - 在插槽中调用 QDialog::exec 会阻塞主事件循环吗?

我的 Qt 应用程序的主窗口是一个普通的QMainWindow子类。在那个窗口中,我有几个按钮;每个都有自己的clicked信号连接到自己的插槽,每个插槽都会创建一个不同的插槽,QDialog如下所示:

我一直在阅读这篇文章:https ://wiki.qt.io/Threads_Events_QObjects#Events_and_the_event_loop ,作者说

你永远不应该阻塞事件循环

这让我很担心;exec是一个阻塞函数,所以根据他所说的(他的例子Worker::doWork做了很多工作并且需要一些时间来完成)我的代码阻塞了事件循环,但我没有注意到任何暗示这一点的东西;相反,主窗口似乎表现正常,当我更改代码以使用该show()方法时没有任何区别。

我阻止了事件循环吗?我应该在这里使用不同的方法吗?