【问题标题】:QQmlListProperty : Cannot assign to non-existent property "lon" lon: "3"QQmlListProperty:无法分配给不存在的属性“lon”lon:“3”
【发布时间】:2013-11-12 12:51:21
【问题描述】:

我想看看 QQmlListProperty 是如何使用的。我尝试了以下方法,但我不确定这是否是正确的方法。我收到标题中显示的错误。

aa.h

#ifndef IMO
#define IMO

#include <QQmlListProperty>
#include "DummyClass.h"

class SubClass: public QObject
{
  Q_OBJECT

  Q_PROPERTY (QQmlListProperty <DummyClass> functionWhat READ functionWhat)

public:
  SubClass (QObject *parent = 0);
  QQmlListProperty <DummyClass> functionWhat()
  {
    return QQmlListProperty <DummyClass> (this, dummyList);
  }

private:
  QList <DummyClass*> dummyList;   
};

#endif

aa.cpp

#include "aa.h"

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"

SubClass :: SubClass (QObject *parent) : QObject (parent)
{
  qDebug ("In Constructor.");
}

void appendDummies (QQmlListProperty<DummyClass> *property, DummyClass *dc)
{
  qDebug ("Do nothing. Can't add to a directory using this method.");
}

DummyClass.h

#ifndef IM
#define IM
#include <QObject>

class DummyClass : public QObject
{
  private:
    Q_OBJECT
    Q_PROPERTY (bool functionWhat READ functionWhat WRITE functionSetWhat)  
  public:
    DummyClass (QObject *parent = 0) {}

    float lat; float lon;

    bool functionWhat ()
    {
        qDebug ("In functionWhat");
    }

  public slots:
    void functionSetWhat (bool arg)
    {
        qDebug ("In functionWhatSlot");
    }

  signals:
    void functionWhatChanged (bool arg);
};

#endif

ma​​in.cpp

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include "/home/anisha/qmllistproperties/DummyClass.h"
#include <QtQml>
#include "/home/anisha/qmllistproperties/aa.h"
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    const char* ocuui = "OCUUI"; // @uri OCUUI

    qmlRegisterType <DummyClass> (ocuui, 1, 0, "DummyClass");
    qmlRegisterType <SubClass> (ocuui, 1, 0, "SubClass");


    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/untitled/main.qml"));
    viewer.showExpanded();

    return app.exec();
}

ma​​in.qml

import QtQuick 2.0
import OCUUI 1.0

Rectangle {
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }

    SubClass
    {
       functionWhat:
       [
           DummyClass
           {
              lat: "2"
              lon: "3"
           }
       ]
    }


    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

【问题讨论】:

    标签: qt qml qt-quick


    【解决方案1】:

    您的DummyClass 中似乎缺少latlon 属性的属性声明:

    Q_PROPERTY (int lat READ getLat WRITE setLat)
    Q_PROPERTY (int lon READ getLon WRITE setLon)
    

    你应该学习this example

    【讨论】:

    • 我们是否必须定义新的 getLat 和 setLat 函数?
    • @user462608 是的。如果您查看我链接的示例中的 Person 类 (person.h),则会在此处声明属性 nameshoeSize,以及用于获取和设置这些值的函数。您需要对 latlon 属性执行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多