gpt4 book ai didi

qt4 - 如何使用 qt 线程访问小部件?

转载 作者:行者123 更新时间:2023-12-04 06:15:29 26 4
gpt4 key购买 nike

在我的程序中,我有一个带有文本框和 qthread 指针的小部件类。使用 qthread 指针我想通过文本选择连续更新文本框而不影响应用程序。但我无法访问文本框。尽管我通过将参数传递给 qthread 来访问文本框。我可以访问文本框并更新文本选择几次然后我的应用程序自动终止并指示错误

list_thread: ../../src/XlibInt.c:596: _XPrivSyncFunction: 断言 `(dpy->flags & (1L << 3)) != 0' 失败。

最佳答案

在 Qt 中,您不能(或不应该)在主线程之外的另一个线程中调用任何 GUI 函数。您可以做的是在工作线程中发出信号并在主线程中接收它。

例如,如果您在创建线程后调用

connect(thread, SIGNAL(newText(QString)), lineEdit, SLOT(setText(QString)));

默认情况下,这将建立类型为 Qt::AutoConnection 的连接。 .每当您在接收者所在的同一线程中发出信号时,它就相当于一个简单的函数调用。但是当你在另一个线程(比如你的新线程)中发出那个信号时,它会被排队,然后在主线程再次被调度并继续它的事件循环时被传递,因此槽函数将始终在线程中调用接收者生活。但是请确保您使用值参数(没有指针或引用)声明信号,这样您才能真正获得 QString 的副本。而不是指向线程字符串的指针/引用(可能已经被线程覆盖)。
...
signals:
void newText(QString);
...

您还可以使用 Qt::BlockingQueuedConnection 配置连接,以便线程在发出后等待(阻塞),直到接收器完成处理信号(已从槽函数返回)。作为连接类型。但在您的情况下,这不是必需的。

有关更多信息,请查看 Qt 的 excelent documentation .

关于qt4 - 如何使用 qt 线程访问小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com