Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法


Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法

1. 运行情景
当我在一个窗口中添加了 QTextEdit 控件,并在一个工作者线程中直接调用了 QTextEdit 的append函数,这个时候就会出现下面的错误:

?
1
2
3
QObject::connect: Cannot queue arguments of type 'QTextCursor'
 
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)

 

2. 解决方法

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

1)声明信号和函数

?
1
2
3
4
signals:
     void AppendText( const QString &text);
private slots:
     void SlotAppendText( const QString &text);

2)声明接口函数

?
1
2
public :
     void Append( const QString &text);

3)在类构造函数中连接信号与槽

?
1
connect( this ,SIGNAL(AppendText(QString)), this ,SLOT(SlotAppendText(QString)));

4)实现接口函数

?
1
2
3
4
void ClassName::Append( const QString &text)
{
     emit AppendText( "ok: string1" );
}

5)实现槽函数

?
1
2
3
4
void CIspWnd::SlotAppendText( const QString &text)
{
     mText.append(text);
}

小结:不带参数的信号在Qt工作者线程中被发送即不会出现这类错误。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM