QT 槽函数参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT 槽函数参数问题相关的知识,希望对你有一定的参考价值。

首先说,我对QT的信号和槽部了解。
我想实现这样的功能。下载一个文件,下完后,发送一个信号,然后去处理这个文件。但是我这样写
public slots:
int readXML( QString sXmlFilePath,QString( & )[10][8] );
/home/good/viewPlayerSys-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK____/../viewPlayerSys/xmlpro.h:22: 错误:‘int xmlPro::readXML(QString, QString (&)[10][8])’ cannot be overloaded

/home/good/viewPlayerSys-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK____/../viewPlayerSys/xmlpro.h:18: 错误:with ‘int xmlPro::readXML(QString, QString (&)[10][8])’
这是咋回事阿。

还有我这样写成不成
connect(&down, SIGNAL(downDone()), &readXml, SLOT(readXML(xmlpath,info)));

非常紧急,在线等
还有,如果我把槽函数声明放在public下面而不是slot下,是没有问题的。难道是槽函数的参数问题吗

已径解决了,connect(&down, SIGNAL(downDone()), &readXml, SLOT(readXML(xmlpath,info)));确实不行,貌似要相同参数。我改成connect(&down, SIGNAL(downDone()),this, SLOT(readXML()));
再用readXML()调用readXml.readXML(xmlpath,info)就可以了
那第一个问题怎么回事?

你的问题出现在第三个参数(接收者),第三个参数是个QObject 对象指针,不能赋予函数指针
请查看函数原型
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]
参考技术A 函数指针是不能作为槽函数的参数的!!!

Qt信号与槽函数问题

参考技术A 进程肯定不会产生了。Qt的信号槽是个很复杂的机制,哥大致给你介绍一下Qt的信号槽既可以同步触发,也可以异步触发。当你进行connect的时候,实际上还有第五个参数(可以自己看SDK的介绍)。如果说是默认的,那么要看信号和槽是否属于同一个线程(这里,你可以简单理解为是否是同一个类),然后根据connect的第五个属性来判断是否是同步还是异步。比如BlockingQueuedConnection模式,就会出现你说的多次触发信号阻塞问题,他只有等到上一个触发完成才能继续。槽函数不会产生新线程,他是决定了槽函数声明在哪个线程中,如果默认情况下,在同一个线程里面是同步的,你此时可以理解为普通调用,如果在不同线程里面,槽函数运行的线程通常是异步调用,但是还有一个所谓的事件中心一直run着在处理,就是一个信号队列,没触发一个信号就入队列,先进先出。本回答被提问者采纳

以上是关于QT 槽函数参数问题的主要内容,如果未能解决你的问题,请参考以下文章

qt 关于信号槽传递的参数问题

Qt信号与槽函数问题

Qt 信号槽

Qt--SLOT槽函数相关

Qt 普通函数和槽函数区别

qt修正参数怎么调用自定义函数