1

QML コードから呼び出される C++ の関数があります。関数が である場合、voidまたは を返す場合、intすべて問題ありません。ただし、 a を返し、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++ 部分の「関数内」も出力されません。だから私はそれが動かなくなったか、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 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 に答える