您的位置:首页 > 移动开发

QTextEdit 控件,并在子个线程中直接调用了 QTextEdit 的append函数出错

2018-03-01 15:13 267 查看
当我在一个窗口中添加了 QTextEdit 控件,并在生成的新的子线程中直接调用了 QTextEdit 的append函数,这个时候就会出现下面的错误:
QObject::connect: Cannot queue arguments of type 'QTextCursor'

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

2. 解决方法

经过进一步检查发现原因是Qt中带参数的信号如果在线程中被发送,那么必须放入队列里面,由于QTextEdit是Qt库自带的,改起来不方便,所以我采用了一个简单的方法来解决这个问题,原理是在窗口类中定义信号和槽,并实现另一个接口函数,这个接口函数由线程调用,在接口函数中emit一个信号,示例代码如下:

1)在子线程中声明信号和函数

signals:

    void AppendText(const QString &text);
在主线程(UI线程)中声明槽和函数

private slots:

    void SlotAppendText(const QString &text);

2)声明接口函数

public:

    void Append(const QString &text);

3)在类构造函数中连接信号与槽
connect(receiveInfo,
SIGNAL(AppendText(QString)),
this,
SLOT(SlotAppendText(QString)));

4)实现接口函数
void
ReceiveTh::Append(const
QString
&text)

{

emit AppendText(text);

}


5)实现槽函数
void Widget::SlotAppendText(const
QString
&text)
{

ui->textEdit->append(text);

//ui->textEdit->moveCursor(QTextCursor::End);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 append 控件 qt