c – 在另一个中使用QAbstractListModel
作者:互联网
尝试使用Qt / QML为我的应用程序开发数据模型时遇到问题.
我已经使用了QAbstractListModel来将海关数据模型从C传递到QML,它就像一个简单模型的魅力(例如基于字符串和bool的模型).
但现在我需要构建一个更难的模型,我想知道是否有可能在另一个QAbstractListModel中使用QAbstractListModel.
让我解释一下自己.
我有一个名为model_A build的数据模型:
model_A.h:
#ifndef MODEL_A_H
#define MODEL_A_H
#include <QAbstractListModel>
#include <QList>
class model_A
{
public:
model_A(const QString& _string1,const QString& _string2,const bool& _bool);
QString m_string1;
QString m_string2;
bool m_bool;
};
class abstractmodel_A : QAbstractListModel
{
Q_OBJECT
public:
(here I implemented all the roles functions and overloaded fonctions needed for the model to work)
private:
QList<model_A> m_model_A;
};
#endif // ANSWERS_H
然后我需要在另一个名为model_B的模型中使用该模型:
model_B.h:
#ifndef MODEL_B_H
#define MODEL_B_H
#include <QAbstractListModel>
#include <QList>
#include "model_A.h"
class model_B
{
public:
model_B(const QString& _string1,const QString& _string2,const abstractmodel_A& _modelA);
QString m_string1;
QString m_string2;
abstractmodel_A m_modelA;
};
class abstractmodel_B : QAbstractListModel
{
Q_OBJECT
public:
(here I implemented all the roles functions and overloaded fonctions needed for the model to work)
QList<model_B> m_model_B;
};
#endif // ANSWERS_H
这是可能的,有QAbstractListModel的DISABLE_COPY的所有限制问题,还是我应该找到另一种方法来构建我的数据模型?
谢谢.
解决方法:
在model_B中,您可以存储指向abstractmodel_A的指针,因此DISABLE_COPY不会成为问题:
class model_B
{
public:
abstractmodel_A * m_modelA;
};
model_B modelBObject;
modelBObject.m_modelA = new abstractmodel_A(/*parent*/);
接下来,在abstractmodel_B中创建model_A_role,以便QML可以访问委托中的模型A.在abstractmodel_B :: data函数中,您必须将abstractmodel_A *转换为QVariant.由于来自QAbstractListModel(它是一个QObject)的abstractmodel_A inheirts,类型转换可以简单地完成,如下所示:
QVariant abstractmodel_B::data(const QModelIndex &index, int role) const
{
//...
if (role == Model_A_Role)
{
return QVariant::fromValue<QObject *>(m_model_B[index.row()].m_modelA);
}
}
最后回到QML,使用ListView来处理C模型:
ListView {
model: model_B
delegate: Item {
ListView {
model: model_A_role
delegate: DelegateForModelA { /*...*/ }
}
//...
}
}
DelegateForModelA可以直接访问model_A中的角色.
标签:c,qt,qml,datamodel,qabstractlistmodel 来源: https://codeday.me/bug/20190829/1764684.html