我在C ++中有一个函数,它是从我的QML代码中调用的。当函数为void
或返回int
时,一切都很好。但是当返回QVariant
并且我调用该函数时,该函数不会超出。
C ++函数
QVariant Wifi::scan(){
QVariantList varlist;
QVariant var;
qDebug("Inside function");
varlist.append("Test1");
varlist.append("Test2");
var = QVariant(varlist);
return var;
}
.h文件
include <QVariant>
class Wifi : public QObject
{
Q_OBJECT
public:
Wifi();
Q_INVOKABLE QVariant scan();
Q_INVOKABLE int checkIfConnected();
QStringList* getDevice();
};
在QML文件中,“Test”打印,但“Test2”不打印。 C ++部分的“内部功能”也不打印。所以Iäm假设它卡在wifi.scan()
部分
console.debug("Test")
var anArray = wifi.scan()
for (var i=0; i<anArray.length; i++)
console.log("Array item:", anArray[i])
console.debug("Test2")
我没有收到任何类型的错误消息。我还尝试将返回值分配给“属性变体”,然后单独运行它(wifi.scan()
),而不将返回值赋给任何东西。关于什么可能是问题的任何想法?
答案 0 :(得分:2)
我看到了问题所在。我在qml中的switch语句中进行了函数调用。
switch(returnint){
case 1:
loadingtext.text = "Already Connected"
break;
case 0: //do scan of networks in range
console.debug("Test")
var anArray = wifi.scan()
for (var i=0; i<anArray.length; i++)
console.log("Array item:", anArray[i])
console.debug("Test2")
break;
case -1:
loadingtext.text = "No wireless card found"
break;
}
我只需将case语句放在括号中,否则只会执行第一行
case 0: //do scan of networks in range
{
console.debug("Test")
var anArray = wifi.scan()
for (var i=0; i<anArray.length; i++)
console.log("Array item:", anArray[i])
console.debug("Test2")
}
break;
从qt项目论坛上的另一个帖子我看到这是Qt4.8中的一个问题,但它已在Qt5中修复,但由于我使用Qt4.8,括号将做 http://qt-project.org/forums/viewthread/9897