1

我有一个从我的 QML 代码调用的 C++ 函数。当函数是void或返回时,int一切都很好。但是,当返回 aQVariant并且我调用该函数时,该函数不会执行。

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++ 部分的“内部函数”也不打印。所以我假设它卡住了或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())而不将返回值分配给任何东西。关于可能是什么问题的任何想法?

4

1 回答 1

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

于 2013-06-11T16:51:11.723 回答