关于QT textWidget显示问题 程序异常退出了,求解 80

像QQ聊天窗口一样.一个线程用了输入,输入完后显示到上面的消息窗口(textWidget),我时用textWidget->append(mytext);//输入后显示到消... 像QQ聊天窗口一样.一个线程用了输入,输入完后显示到上面的消息窗口(textWidget),我时用
textWidget->append(mytext);//输入后显示到消息窗口.
在另外一个线程用来接收对方发过来的消息并显示,如下
p->data->UI->textWidget->append(receivedText);//接收对方消息,并显示. p->data->UI是一个指向聊天窗口的指针;p是链表指针,data里面是用户数据,data里面有UI界面参数.
这样运行没有问题.但是在相互对话时有以下错误提示:
QObject::connect: Cannot queue arguments of type 'QTextCharFormat'

(Make sure 'QTextCharFormat' is registered using qRegisterMetaType().)

QObject::connect: Cannot queue arguments of type 'QTextBlock'

(Make sure 'QTextBlock' is registered using qRegisterMetaType().)

QObject::connect: Cannot queue arguments of type 'QTextCursor'

(Make sure 'QTextCursor' is registered using qRegisterMetaType().)
再继续对话的话不知不觉什么时候就异常退出了.
这是什么情况,怎么解决.问题解决后再给100财富
展开
 我来答
yanhubin
2014-10-08 · TA获得超过183个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:172万
展开全部
方法一是:connect时添加参数Qt::DirectConnection,以保证其不被放入信号队列,从而达到想要的效果,但这种办法不一定能解决该问题,因为QTextCharFormat类型是Qt的基本类型,是可以作为信号参数使用的,但此处却提示它并不能作为信号参数,所以根本问题不是Qt::DirectConnection所能解决的。
经过进一步检查你会发现问题产生的原因是,该信号被放在了一个线程里面,但线程内信号是必须要放入队列的,所以上面的方法根本不可行,因此解决问题的关键是将相关信号移出run函数,可以采用空参数信号,或等待finished()信号完毕后,用finished()信号去关联一个槽函数来解决,甚至该槽函数就是QThread的私有槽。
追问
按你所说,这是一个什么信号?它是怎么产生的?可不可以让他不产生这个信号就可以解决这个问题不?我在想,是不是textWidget里面的内容改变了就产生了这个信号.还请详细说说.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式