本文最后更新于:2 个月前
保留现场
我在线程中直接调用了 QTextEdit 的append函数时,候就会出现下面的错误:
1 2 3
| QObject::connect: Cannot queue arguments of type 'QTextCursor' (Make sure 'QTextCursor' is registered using qRegisterMetaType().)
|
探究原因
原因是**我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal)**,较为简单的方式是使用 Qt threading类。
解决方法
在窗口类中定义信号和槽,并声明和实现一个接口函数,这个接口函数由线程调用,在接口函数中emit一个信号,示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| signals: void AppendText(const QString &text); private slots: void SlotAppendText(const QString &text); public: void Append(const QString &text);
connect(this,SIGNAL(AppendText(QString)),this,SLOT(SlotAppendText(QString))); void ClassName::Append(const QString &text) { emit AppendText("ok: string1"); }
void ThreadClassName::SlotAppendText(const QString &text) { mText.append(text); }
|