问题标签 [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.
qt - 由于其他线程忙于大循环,QTimer 延迟触发
环境简介:我有一台设备运行一个用 qt 编写的应用程序。它有一个处理数据库操作(SQlite)的主线程和一个用于网络操作(通过3G)的单独线程。主线程事件循环由 QCoreApplication::exec 运行,另一个处理网络操作的线程由 QThread::exec 运行。顺便说一句,套接字线程关联在它启动后会发生变化(例如 moveToThread(socketThreadPtr))
问题简介:主线程忙于一个循环,以便从数据库中选择大约 10k 条记录,该循环大约需要 +30 秒。在网络线程中有一个 15 秒的计时器,它必须在每次到期时发送一条保持活动消息。问题是 timeout() 信号的插槽仅在循环完成后才执行。
到目前为止建立的解决方案(但不令人满意):如果我在选择记录的循环中调用 QCoreApplication::processEvents,问题就解决了,但我想知道是否存在解决方案而不是这种解决方法。
备注:定时器、信号和槽,提供发送保持活动消息的命令当前在主线程中处理(但读/写发生在网络线程中)。另外,我在网络线程上移动了计时器,但得到的结果与在主线程上的结果相同。
qt - 获取 Pixmap 是调用函数 500 次时的空像素图
我在 qt 标签中显示图像。下面是我的代码:
单击按钮时,它将向服务器发送请求,并显示从服务器接收到的不同图像。如果它不超过 500 次,它工作正常。如果它超过第一个,则显示此错误
它不显示图像。然后,如果有人再次发送图像请求,则会显示以下错误:Qt 已捕获从事件处理程序引发的异常。Qt 不支持从事件处理程序中抛出异常。您必须QApplication::notify()
在那里重新实现并捕获所有异常。
我没有得到上面代码中的错误。有人可以告诉我如何解决这个问题吗?
c++ - 插槽参数(有时)无效
在类似 10-20 的信号调用之一中,我在插槽中有一个无效的参数。问题归结为以下几点
发生这种情况时,我可以在 QCoreApplication::notifyInternal2
(例如)的故障转储中看到:
但event->args
似乎无效。
平台是Win64,qt版本是5.6.1,编译器是vs2015。发布。有什么想法吗?谢谢。
qt - 伪造 QWebEngine 以“同步”运行 Javascript 代码
我正在使用QWebEngine
并且我想同步运行一些 Javascript!或者至少假装。所以我想出了一个经典的,QEventLoop
用来等待。我从QWebEngineView
派生类中调用此代码:
但是,这不起作用,因为 lambda 永远不会执行。不管这是否是一个完整的黑客(它是),我很好奇它为什么不起作用。
本着完全破解的精神,是否有一种“更好”的方式来完成我想要做的事情?
谢谢!
python - 为什么 PyQt4 在 Jupyter 和 IPython 笔记本之间的行为不同?
我创建了一个基于 PyQt4 的带有 GUI 的大型 python 程序。我希望该软件包既可以在 IPython 笔记本(Windows 上使用 Python 2.7 的旧安装)、Jupyter 笔记本(最近使用 Anaconda 安装的 Python 3.5)中运行,也可以作为在命令行上传递的 python 程序运行。我在 Jupyter notebook 中运行代码时遇到问题(直接在底部查看)。
我的模块 mymodule.py 看起来像这样(非常简化,在许多其他 python 文件显示之前大约 10k 行):
命令行的典型用法是
使用以下文件 myscript.py
这工作正常。我知道需要 APP.exec_() 来启动某种通过 Gui 交互事件工作的 EventLoop。
在 IPython 笔记本中,用户通常会执行
我可以毫无问题地运行它,我知道 IPython 以某种方式在幕后处理了 EventLoop。
现在,在 Jupyter notebook 中运行相同的命令,会打开一个窗口,但在允许任何用户交互之前冻结。所以我相信 Jupyter notebook 没有正确处理这些事件,因为我没有告诉它这样做。我发现的一种方法是%pylab
在运行我的代码之前执行命令。但是,我经常遇到与此相关的问题,例如在启动程序之前连续运行时%pylab
,%matplotlib inline
一旦我加载代码,这会导致再次冻结(奇怪的是,颠倒两个神奇命令的顺序再次起作用)。另外,如果可以避免的话,我不想强迫我的程序的用户在每个新笔记本中执行 %pylab(也是因为我认为这需要安装 matlab,这不是我的程序的要求)。
我必须在 mymodule.py 中添加什么代码才能使内容与 Jupyter 笔记本中描述的用户代码兼容?谁能更清楚地解释 IPython 笔记本和 Jupyter 笔记本如何以不同的方式管理 QEventLoop/QApplication(或这里的重要概念),以及魔术命令如何与此混淆?因此,我害怕我的程序中隐藏的错误,并希望使其尽可能强大,以免让用户感到沮丧。
qt - QEventLoop 丢弃一些信号
我有一个关于 QEventLoop 的问题:如何设置 QEventLoop 以丢弃某些信号
这是我启动这个程序时的代码,每隔 5 秒就会显示一个超时 QMessageBox。但我想如果我按下按钮然后显示点击消息框并且不显示超时消息框..我找不到任何方法来做到这一点
c++ - 从 Qt 中的错误中恢复
我正在实现一个使用 3 个线程的系统(一个是 GUI,一个是用于数据采集的 TCP 客户端,一个用于计算的分析线程)。我很难处理其中任何一个的异常。我现在试图解决的情况是如果某些计算出错会发生什么,我需要“冻结”系统。问题是在某些情况下,我在分析线程的事件循环中等待数据。如何在不处理所有事件的情况下安全地清除此队列(正如我所说,出了点问题,所以我不想再进行任何计算)。有没有办法清除特定线程的事件循环?我什么时候可以安全地删除对象?
谢谢
python - Pyside / Pyqt Opening new windows from a window (Event loop is already running)
I am trying to create a UI that will act as a hub to launch all the other tools that have been created. The problem is that if i try to launch the UI from the toolshub UI, it won't let me because the event loop is already running. I know that I cannot do this APP = QtGui.QApplication(sys.argv) and APP.exec_() when launching the new window because the event loop is already running when I did that for the toolshub UI. But I can't figure out how to do it another way.
Here is an example code for one of the tools, works launching on its own.
Now here is the code for the toolshub ui. These are both separate scripts. In toolshub i am importing the tool above.
So how do write and structure these so that I can open the tool UI from the toolshub UI? I am guessing the code i have to change is the tool UI, I know i have to take out APP = QtGui.QApplication(sys.argv) and APP.exec_(), but not sure what to do to launch it.
Thanks
c++ - QEventLoop 的 exec 在某些情况下不会循环。(QT 4.8)
我正在一个 QT 复杂应用程序中工作,该应用程序通过 QT 4.8 插槽为 HTTP/TCP 请求提供服务。
示例模块(QT 插槽):
使用这个模块,我们可以通过 HTTP 或 TCP 请求调用我们的服务。
我正在添加一个需要从外部 HTTP 服务器同步检索数据的新模块。为此,我使用了 QEventLoop 和 QNetworkAccessManager。
问题发生在 QEventLoop 的行为上。我已将我的问题降到最低:
当我从入口点 X(即执行 HTTP 请求)调用此方法时,事件循环会循环(仅记录“BEFORE”),但是当从入口点 Y(即执行 TCP 请求)调用相同的方法时,事件循环不循环(记录“之前”和“之后”)。
我不知道为什么会发生这种不同的行为。有人可以指出我正确的方向吗?
谢谢
qt - QStateMachine 中的事件是如何管理的?
我使用基于QScxmlStateMachine
. 一些转换由onEntry处理程序中的代码自动触发,另一些则由外部事件(例如用户单击)触发。
状态机的执行是异步的。此代码没有阻塞:
美好的。我想知道的是状态机内部的处理是如何完成的。
这第一个事件是排队的,将异步进入一个初始化状态,那么在这个状态onEntry代码中可能触发的事件呢,它们也排队了吗?内部事件循环
是否可以在处理下一个转换之前处理一些其他 GUI 事件?
而且,我认为不是,状态机事件循环是否在单独的线程中?