从Q ++函数传递QVariant返回QML Qt4.8

时间:2013-06-10 21:56:16

标签: qt qt4 qml qt4.8

我在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()),而不将返回值赋给任何东西。关于什么可能是问题的任何想法?

1 个答案:

答案 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