gpt4 book ai didi

c++ - 主要的 qmlRegisterType 表现得很奇怪

转载 作者:行者123 更新时间:2023-11-30 04:59:55 25 4
gpt4 key购买 nike

我用c++实现了一个模型,想赋值给Qml,但是报错信息显示:

Unable to assign a function to a property of any type other than var.

我的代码可能有什么问题,谢谢!

.qml

ListView{
anchors.fill: parent
model:MyModel{
list:data
}
delegate: objRecursiveDelegate
}

main.cpp

qmlRegisterType<MyModel>("Model",1,0,"MyModel");
qmlRegisterUncreatableType<Data>("Model",1,0,"Data",QStringLiteral("Data should not be created in QML"));

Data data;
engine.rootContext()->setContextProperty(QStringLiteral("data"), &data);

MyModel.h(try to define using QAbstractListModel)

class Data;
class MyModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(Data *list READ list WRITE setList)

public:
Data *list() const;
void setList(Data *list);
private:
Data* mList;
}

MyModel.cpp

Data *MyModel::list() const
{
return mList;
}
void MyModel::setList(Data *list)
{
beginResetModel();
if (mList)
mList->disconnect(this);
mList = list;
/..../
endResetModel();
}

data.h

class Data:public QObject
{
Q_OBJECT
public:
explicit Data(QObject *parent = nullptr);
/..../
private:
QVector<unit> menu;
};

最佳答案

错误其实很简单,QAbstractListModel的data()方法,所以如果你在MyModel里面使用数据,它会解释你想使用这个方法而不是真正要传递的数据,解决方法是改名:

*.cpp

Data data;
engine.rootContext()->setContextProperty(QStringLiteral("info"), &data);

*.qml

ListView{
anchors.fill: parent
model:MyModel{
list: info
}
delegate: objRecursiveDelegate
}

加上:

  • 另一方面,您还有另一个错误,Data items 方法必须返回菜单:

    QVector<unit> Data::items() const{
    return menu;
    }
  • 另一方面,在您的委托(delegate)中,您必须使用名称访问每个角色,如果模型:

    Component {
    id: objRecursiveDelegate
    Column {
    Row {
    //indent
    Item {
    height: 1
    width: level * 40 // <--
    }
    Text {
    text: name // <--
    }
    Button{
    x:550
    width:30
    text: "-"
    }
    }
    }
    }

我对您的代码进行了其他改进,因此您可以在下面的 link 中找到完整的代码.

关于c++ - 主要的 qmlRegisterType 表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com