C++ 更新Qlabel文档矩形时调用的标签不是文本标签。为什么?

C++ 更新Qlabel文档矩形时调用的标签不是文本标签。为什么?,c++,qt,C++,Qt,在我的代码中,我有以下更新qlabel的函数。qlabel的更新非常频繁。代码是 void foo::someMethod(std:atring a) { {//begin boost::lock_guard<boost::mutex> lock(mutex_label); frm->mylabel->setText(a.c_str()); }//end lock } 有什么建议是什么导致的吗?有时,该值从未显示。我必须移动要更新

在我的代码中,我有以下更新qlabel的函数。qlabel的更新非常频繁。代码是

void foo::someMethod(std:atring a)
{
     {//begin
     boost::lock_guard<boost::mutex> lock(mutex_label);
     frm->mylabel->setText(a.c_str());
     }//end lock
}

有什么建议是什么导致的吗?有时,该值从未显示。我必须移动要更新的值的表单

您不能从其他线程触摸GUI。在这里没有多少互斥量会有帮助,Qt不支持这一点。正确的方法是通过信号和插槽执行此操作


您可以在上阅读更多信息。

您不能从其他线程触摸GUI。在这里没有多少互斥量会有帮助,Qt不支持这一点。正确的方法是通过信号和插槽执行此操作


您可以在上阅读更多信息。

是否将其设置为从多个线程更新?上述方法是静态的。不同的线程调用该方法。您是否将其设置为从多个线程更新?上面的方法是静态的。不同的线程调用这个方法,你能解释一下吗。您是否建议我创建一个信号,然后使用该信号传递数据?您不能从非GUI线程调用setText(在大多数情况下,程序中启动的第一个线程是GUI线程)。相反,声明一个在主线程中执行的插槽,并连接连接到它的信号(在非gui线程中发出)。这样,setText将只从GUI线程调用。您能解释一下吗。您是否建议我创建一个信号,然后使用该信号传递数据?您不能从非GUI线程调用setText(在大多数情况下,程序中启动的第一个线程是GUI线程)。相反,声明一个在主线程中执行的插槽,并连接连接到它的信号(在非gui线程中发出)。这样,只能从GUI线程调用setText。
assert failure in documentRect: "document rect called for label that is not a text label! , file widgets\qlabel.cpp