gpt4 book ai didi

c++ - 我如何与扩展的 QQuickItem 中的模型交互?

转载 作者:行者123 更新时间:2023-11-28 04:35:04 24 4
gpt4 key购买 nike

Qt 文档中有很多关于处理模型和 View 的好资源,例如:http://doc.qt.io/qt-5/model-view-programming.html ,但我似乎找不到任何与 QtQuick 中的模型处理相关的链接。有一些关于用 C++ 扩展 qml 的基本章节,比如 http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example.html ,以及使用模型:http://doc-snapshots.qt.io/qt5-5.11/qtquick-modelviewsdata-modelview.html ,但我找不到在扩展 qml 中使用实际模型的方法。

目前我有这个模型:

class LayoutModel : public QAbstractItemModel {
Q_OBJECT

public:
explicit LayoutModel(const QString &data, QObject *parent = 0);
~LayoutModel();

QVariant data(const QModelIndex &index, int role) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;

private:
void setupModelData(const QStringList &lines, LayoutItem *parent);

LayoutItem *rootItem;
};

我正在尝试从这个 View 类访问它:

class Layout : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(LayoutModel model READ model WRITE setModel NOTIFY modelChanged)

private:
LayoutModel & m_model;

public:
explicit Layout(QQuickItem * parent = nullptr);

LayoutModel & model() const;
void setModel(const LayoutModel & model);

void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData & value) override;
void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry) override;

signals:
void modelChanged();
};

但我找不到实际使用该模型的方法。我什至无法正确设置模型的读写,因为 QAbstractItemModels(和一般 Qt 中的模型)删除了它们的复制构造函数以强制实体奇点。这是我当前损坏的实现:

Layout::Layout(QQuickItem * parent) : QQuickItem(parent) {}

LayoutList & Layout::model() const
{
return m_model;
}

void Layout::setModel(const LayoutList & model)
{
if (m_model == model)
return;

m_model = model;
emit modelChanged();
}

那么,我该怎么做才能将这个扩展的 qml 类与我的 LayoutModel 一起使用?

最佳答案

QObject没有复制构造函数,所以你必须使用指针:

*.h

class Layout : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(LayoutModel *model READ model WRITE setModel NOTIFY modelChanged)

private:
LayoutModel *m_model;

public:
explicit Layout(QQuickItem * parent = nullptr);

LayoutModel *model();
void setModel(LayoutModel * model);
...
signals:
void modelChanged();
};

*.cpp

...

LayoutModel *Layout::model()
{
return m_model;
}

void Layout::setModel(LayoutModel *model)
{
if (m_model == model)
return;
m_model = model;
emit modelChanged();
}

关于c++ - 我如何与扩展的 QQuickItem 中的模型交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708774/

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