标题:多线程UI显示消息问题
作者:mugua001
日期:2021-07-15 13:33
内容:
UI的函数fun1(),是通过线程函数 nthread() 实例化后调用的。
结果:导至主线程函数fun1()中 输出到文本框的内容,都不显示,只能qDebut()显示;
然后,在fun1()中通过 信号 ,启动其他函数fun2(),也不行,fun2() 也不在主线程中……
如何处理这种情况,让消息在文本框显示?
//-----------------------------
函数 sacMainWindow:: fun1()//该函数由线程 函数调用。 sacMainWindow *p = new sacmainwindw;p->fun1();
{
prnMsg("",false);
prnTxt("",true);
}
void sacMainWindow::prnMsg(QString qSrcStr)
{
//ui->plainTextEdit_info ->appendPlainText(qSrcStr);
//ui->plainTextEdit_txt->appendPlainText(qSrcStr);
emit prnMsgSignal(qSrcStr, false);
qDebug() clear();
//ui->plainTextEdit_txt->appendPlainText(qSrcStr);
emit prnMsgSignal(qSrcStr, true);
}
void sacMainWindow::prnMsgSlotFun(QString qSrcStr, bool cls)
{
if(cls)
{
ui->plainTextEdit_txt->clear();
ui->plainTextEdit_txt->appendPlainText(qSrcStr);
qDebug() appendPlainText(qSrcStr);
ui->plainTextEdit_txt->appendPlainText(qSrcStr);
qDebug()
#1 [mugua001 07-15 13:34]
connect(this, SIGNAL(prnMsgSignal(QString, bool)), this, SLOT(prnMsgSlotFun(QString, bool)), Qt::QueuedConnection);
#2 [fsu0413 07-22 08:13]
QueuedConnection也不一定好使吧,slot需要到主线程执行
#3 回 fsu0413 的帖子 [mugua001 07-22 09:56]
fsu0413:QueuedConnection也不一定好使吧,slot需要到主线程执行 (2021-07-22 08:13)
是的,不好使;
哪怕是用信号 记动的 槽函数,也是在子线程里,而不是在 主线程中。郁闷中……
#4 [onlyone 07-23 15:45]
基础问题。
首先UI不能在非主线程中创建和调用,要想UI的文本框能显示消息,该对象必须在主线程中。
其他线程,通过emit信号的方式,发送信号给主线程。主线程收到后,把消息在文本框中显示。
viewMsgSlotFun函数,只能在主线程中,执行。
#5 [wuyuande 07-23 17:03]
用QMetaObject::invokeMethod试一下?