原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法
本文链接地址: Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法
1. 运行情景
当我在一个窗口中添加了 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); private slots: void SlotAppendText(const QString &text);
2)声明接口函数
public: void Append(const QString &text);
3)在类构造函数中连接信号与槽
connect(this,SIGNAL(AppendText(QString)),this,SLOT(SlotAppendText(QString)));
4)实现接口函数
void ClassName::Append(const QString &text)
{
emit AppendText("ok: string1");
}
5)实现槽函数
void CIspWnd::SlotAppendText(const QString &text)
{
mText.append(text);
}
小结:不带参数的信号在Qt工作者线程中被发送即不会出现这类错误。
原创文章,转载请注明: 转载自勤奋的小青蛙
本文链接地址: Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法
本文链接地址: Qt程序错误“QObject::connect: Cannot queue arguments of type ‘QTextCursor’”的解决方法
文章的脚注信息由WordPress的wp-posturl插件自动生成
微信扫一扫,打赏作者吧~![[整理][转载]win下网卡抓包发包库Npcap使用](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2023/08/demo_1-1024x711.jpg&w=280&h=210&zc=1)
![[转载]基础数据char,int,double,string是线程安全的吗?](http://www.jyguagua.com/wp-content/themes/begin/img/random/1.jpg)
![[整理]how to run flask with pyqt5](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2021/03/pyqt_flask.png&w=280&h=210&zc=1)
![[整理]用c++编写的RDTSC性能计时器](http://www.jyguagua.com/wp-content/themes/begin/timthumb.php?src=http://www.jyguagua.com/wp-content/uploads/2020/12/rdtsc-assembly-example.jpg&w=280&h=210&zc=1)