- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的工作时间非常重要,我对 processEvents() 的行为有疑问。当我调用 processEvents() 时,它是否在单独的线程/进程上运行,以便在执行更多代码时它可能仍在运行?
如果不是,我的代码是否有可能在 processEvents() 之后但在我显示器上的所有像素都更新为最新场景之前继续执行(可能是因为操作系统处理像素绘制)?下面是伪代码
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.drawScene()
app.processEvents() #Force window to update to scene
print("Hi!") #Is there any chance of this being called before my screen's pixels are all set to the newest scene?
如果 processEvents() 之后的代码确实在屏幕像素全部更新之前运行,有没有办法保证在继续之前屏幕已更新?
最佳答案
QCoreApplication::processEvents()
在您调用它的同一线程中运行,它不使用单独的线程。它将处理当前在事件队列中排队的所有事件。如果有类型为 QEvent::Paint
的事件在队列中,它将触发窗口的重绘。你的drawScene()
可能会通过直接或间接调用 QWidget::update()
将绘画事件放入事件队列中.
是的,请调用 processEvents()
将完成挂起的重绘,并且仅在处理完重绘事件后返回。
FWIW,QProgressDialog::setValue()
内部调用 processEvents()
以确保进度条已更新,因此它也必须在那里工作。
我能想到的导致像素不显示的唯一原因是所谓的平台插件中特定于平台的代码在重新绘制时执行异步操作。需要仔细检查您正在使用的操作系统的平台插件代码才能绝对确定。
实际上在X11上似乎就是这种情况,它是异步的。检查docs for QTest::qWaitForWindowExposed - 在内部调用 processEvents()
在一个循环中,直到 QWindow::isExposed()
返回真。所以至少对于最初显示的窗口,你需要运行 processEvents()
在循环中以确保窗口实际显示。我不知道是否需要重新粉刷。参见 the section "Visibility and Windowing System Exposure" in the docs of QWindow了解更多详情。
关于python - QCoreApplication.processEvents 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44396099/
当我在 Qt Creator 中创建一个新的移动应用程序时,我注意到在自动生成的代码中他们使用了 #include 而不是 #include ,即使两者的工作原理相同。 由于 Qt Creator
我是 PyQt5 新手。我编写了一个简单的 CLI 脚本,它发出 GET 请求,打印结果,然后退出并出现错误:“QWaitCondition:线程仍在等待时被销毁” 我做错了什么?我的代码如下所示:
我需要(例如在构建库时)在堆上实例化 QCoreApplication,我发现了以下奇怪的行为(Qt 5.7): #include #include class Test { public:
我正在尝试为 Web 服务构建客户端。我的目标是每秒向我的服务器发送一个请求。我用这个库来帮助我:QHttp 我创建了一个计时器,它与我的QCoreApplication 应用程序 的信号相关联,并在
当信号QCoreApplication::quit()在事件循环开始前被同步触发时,信号被忽略,应用程序永远挂起。但是,从 QTimer 触发,应用程序正确退出。启动可在 exec 循环启动之前立即返
我有一个基于控制台的 QCoreApplication它具有计时器并进行套接字通信并使用锁定的互斥锁。 当我手动关闭应用程序时,它给出错误,说某些互斥锁被锁定并且超时。当用户关闭控制台应用程序时,有什
我正在尝试将 Qt 用作库(类似于 this ),因为我想在一些当前非 Qt 应用程序中重用 Qt 类,并在共享库中作为跨平台胶水。一切都是非 GUI 的。 DirectConnection 可以轻松
我正在制作一个用于从 FTP 服务器下载文件的 Qt5 QCoreApplication(从 HTTP 开始,现在已切换)。 我的程序要关闭时遇到问题。在我将 exit(0) 添加到 download
由于只有一个QCoreApplication对象,为什么从哪个线程调用QCoreApplication::processEvents()无关紧要? 毕竟,线程都共享相同的地址空间。 最佳答案 您的标题
这个简单的代码在程序结束时崩溃(Qt 5.9.1,gcc 5.4.1): #include #include std::shared_ptr manager; int main(int argc,
我的工作时间非常重要,我对 processEvents() 的行为有疑问。当我调用 processEvents() 时,它是否在单独的线程/进程上运行,以便在执行更多代码时它可能仍在运行? 如果不是,
我有一个派生自 QCoreApplication 类的应用程序,它有一个子线程成员。当我删除应用程序对象时,它有时会删除,有时不会。 class My_class :public QCoreAppli
看下面的代码: #include #include int main(int argc, char *argv[]) { QCoreApplication app(argc, argv);
我正在尝试使用 Qt 创建控制台应用程序,但在尝试检索参数时遇到了非常奇怪的行为。我的类派生自 QCoreApplication,它有一个函数,通常应将所有 args 放入某个 strings 列表中
删除serialPort会在调试版本中导致以下消息: QCoreApplication::sendEvent中的ASSERT失败:“无法将事件发送到另一个线程拥有的对象。当前线程c0a528。接收器”
我需要两个事件循环:一个用于 Windows 服务(或 Linux 守护程序),另一个用于 Qt 事件队列 QCoreApplication: :exec()(或 QApplication::exec
我已经编写了这个简单的 QT 主窗口,只有当我将 QString 参数传递给 QKeyEvent 时,它才会打印 key ,我希望即使没有 QString 参数也能打印 key ? 下面代码中的第 1
我的代码太长了,这里是相关部分: videoClass::videoClass() { ... QThread* workerThread = new QThread(this);
我正在尝试构建一个简单的基于 Qt 的蓝牙服务器 (rfcomm),它只在控制台中打印客户端发送的文本。我注意到当我使用 QCoreApplication(这是我需要的)而不是 QGuiApplica
我正在编写一个 QCoreApplication,它应该通过 Qprocess 创建一个外部进程。 我刚刚注意到,即使在事件处理程序执行之前调用了 waitForStarted() 并且进程状态为 R
我是一名优秀的程序员,十分优秀!