如何与扩展QQuickItem中的模型进行交互?

时间:2018-08-06 13:27:29

标签: c++ qt qml qt5 qtquick2

在Qt doc中有许多处理模型和视图的好资源,例如: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;
};

我正在尝试从此视图类访问它:

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();
}

那么,我如何做到这一点,以便可以在我的LayoutModel中使用这个扩展的qml类?

1 个答案:

答案 0 :(得分:1)

Registration没有副本构造函数,因此必须使用指针:

*。h

brough_signature = True

*。cpp

 $(document).on('click', '.unmutevideo', function() {

    localParticipant.audioTracks.forEach(function(audioTrack) {
        console.log('+++++ audioTrack ' + audioTrack + ' +++++');
        audioTrack.enable();
    });
    microphone = true;
   });

   $(document).on('click', '.mutevideo', function() {

    localParticipant.audioTracks.forEach(function(audioTrack) {
        console.log('+++++ audioTrack ' + audioTrack + ' +++++');
        audioTrack.disable();
    });
    microphone = false;
   });