最近,我对如何用子模型创建一个简单的通用模型并将其数据传递到.qml页面很感兴趣。我得到了帮助并做到了。但现在我有了另一个问题。现在我可以使用角色,但不能使用信号或方法。
下面是我的代码之前的样子
basemodel.h
class BaseModel : public QObject
{
Q_OBJECT
Q_PROPERTY(ExtraModel* extra READ extraModel CONSTANT)
public:
explicit BaseModel(QObject *parent = nullptr);
ExtraModel* extraModel() const { return extraModel_; }
private:
ExtraModel* extraModel_ = nullptr;
};basemodel.cpp
BaseModel::BaseModel(QObject *parent)
: QObject(parent),
extraModel_(new ExtraModel(this))
{
}下面是我将.qml页面更改为BaseModel之前的情况
Rectangle {
signal selectionChanged(int value, string pageTitle, string itemName)
SilicaListView {
id: list
anchors.fill: parent
model: ExtraModel {
id: _extraModel
onSelectedChanged: {
selectionChanged(selected, name, itemName)
}
}
delegate: Rectangle {
MouseArea {
anchors.fill: parent
onClicked: _extraModel.activate(index)
}
}
}
}这就是我想要的样子(或者类似的东西)
Rectangle {
signal selectionChanged(int value, string pageTitle, string itemName)
BaseModel {
id: _baseModel
}
SilicaListView {
id: list
anchors.fill: parent
model: _baseModel.extra {
id: _extraModel
onSelectedChanged: {
selectionChanged(selected, name, itemName)
}
}
delegate: Rectangle {
MouseArea {
anchors.fill: parent
onClicked: _extraModel.activate(index)
}
}
}
}但是_baseModel.extra不能作为组件工作,所以我询问了如何使用来自_baseModel.extra的信号,得到的答案是: Connections对象。所以,我搜索并找到了connections对象是什么。所以,我试着使用它,但我只是发现我无法从ExtraModel访问我的信号,或者可能做错了什么。
这就是我尝试使用connection对象的方式
SilicaListView {
id: _list
anchors.fill: parent
model: _baseModel.extra
Connections {
id: _extraModel
target: _baseModel.extra
onSelectedChanged: {
selectionChanged(selected, name, itemName)
}
}
...
}那么,问题是如何使用BaseModel从ExtraModel访问我的信号和方法?
发布于 2020-07-03 00:15:06
要使用Connections对象连接到信号,您的代码应如下所示:
model: _baseModel.extra
Connections {
target: _baseModel.extra
onSelectedChanged: {
selectionChanged(selected, name, itemName)
}
} 编辑:要调用可调用的函数,您应该能够这样做:
MouseArea {
anchors.fill: parent
onClicked: _baseModel.extra.activate(index)
}https://stackoverflow.com/questions/62699222
复制相似问题