我是QT的初学者,我正在尝试将2d bool QList作为Q_PROPERTY传递给QML,但不幸的是它失败了。当我尝试简化(1d)QList和qml rootItem.chkbool [0]正确(有效)时,但2d QList失败:

main.cpp

 Object myObj;
        QQmlContext* ctx = engine->rootContext();
        ctx->setContextProperty("rootItem", (QObject *)&myObj);

qml:
import QtQuick 2.9
import QtQuick.Controls 2.3
import QtQuick.Window 2.2
import QtWebEngine 1.5
import QtQml.Models 2.2

Window {
    flags:  Qt.ToolTip | Qt.FramelessWindowHint | Qt.WA_TranslucentBackground
    color: "#00000000"
    visible: true
    width: 1920
    height: 1080
    title: qsTr("Hello World")

    CheckBox {
            id:chk
            checked: rootItem.chkbool[0][0]
        }

}

object_.h
#ifndef RECEIVER_H
#define RECEIVER_H
#include <QObject>
#include <QtGui>
#include <QList>

class Object : public QObject
{
    Q_OBJECT
    Q_PROPERTY( QList<QList<bool>> chkbool READ getBoolChange NOTIFY changeOfStatus )

 public:
  Object() {
      enbeddedList.push_back(true);
      enbeddedList.push_back(false);
      list.append(enbeddedList);

      emit changeOfStatus();
  }

  QList<QList<bool>> getBoolChange(){
      return list;
  }

  signals:
   void changeOfStatus();

  private:
   QList<bool> enbeddedList;
   QList<QList<bool>> list;
   bool changeMe;
   int theValue;
   QTimer *myTimer;

};
#endif // RECEIVER_H

有人知道正确的代码吗?

最佳答案

数据类型转换是正确的(来自folibis)。

这是正确的代码:

object_.h

#ifndef RECEIVER_H
#define RECEIVER_H
#include <QObject>
#include <QtGui>
#include <QList>
#include <QMetaType>

class Object : public QObject
{
    Q_OBJECT
    Q_PROPERTY( QVariantList chkbool READ getBoolChange NOTIFY changeOfStatus )

 public:
  Object() {

      QVariantList variant;
      variant.append(true);
      variant.append(false);
      list.insert(list.size() ,variant);

      emit changeOfStatus();
  }

  QVariantList getBoolChange(){
      return list;
  }

  signals:
   void changeOfStatus();

  private:
   QVariantList list;
   bool changeMe;
   int theValue;
   QTimer *myTimer;

};
#endif // RECEIVER_H

谢谢大家!

关于c++ - QML的Qt 2或3d Bool列表访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49732080/

10-13 09:38