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

Qt4 如何使用qt线程访问小部件?,qt4,qthread,qtextedit,Qt4,Qthread,Qtextedit,在我的程序中,我有一个带有文本框和qthread指针的小部件类。使用qthread指针,我希望通过文本选择不断更新文本框,而不影响应用程序。但是我无法访问文本框。即使我通过将参数传递给qthread来访问文本框。我可以访问文本框并在几次更新文本选择,然后我的应用程序自动终止并显示错误 list_thread:../../src/XlibInt.c:596:_XPrivSyncFunction:Assertion`(dpy->flags&(1L)在Qt中,除了主线程外,您不能(或不应该)调用其他线

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

list_thread:../../src/XlibInt.c:596:_XPrivSyncFunction:Assertion`(dpy->flags&(1L)在Qt中,除了主线程外,您不能(或不应该)调用其他线程中的任何GUI函数。您可以做的是在工作线程中发出信号,并在主线程中接收它

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

connect(thread, SIGNAL(newText(QString)), lineEdit, SLOT(setText(QString)));
默认情况下,这将建立类型为
Qt::AutoConnection
的连接。每当您在接收器所在的同一线程中发出信号时,它相当于一个简单的函数调用。但是当您在另一个线程(如新线程)中发出该信号时,它进入队列,然后在主线程再次调度并继续其事件循环时被传递,因此插槽函数将始终在接收器所在的线程中被调用。但请确保使用值参数(无指针或引用)声明信号,因此您实际上得到的是
QString
的副本,而不是线程字符串的指针/引用(该字符串可能已经被线程覆盖)

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


有关更多信息,请查看Qt。

欢迎访问该网站,我希望您阅读。
...
signals:
    void newText(QString);
...