- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我有两个 QQuickItem s 并且我想在将它暴露给 QML 之前用 C++ 在另一个之上绘制一个。我想这样做是因为我想要第二个 QQuickItem (从这里开始我将其称为背景 QQuickIt
我目前正在为 Qt Quick 建立一个 C++ 工厂。我需要能够将工厂生成的子项添加到另一个自定义 QQuickItem,如下所示: class Bar : public QQuickItem {
我对这个错误束手无策。任何有关如何追踪它的建议都将不胜感激。 背景: 我一直在尝试将 ogre3d View 实现为 Qt5 中的 QQuickItem。有一个示例 (qmlogre) 表明这是可能的
我通过扩展 QQuickItem 并覆盖 updatePaintNode() 函数创建了一个自定义 QML 元素。 因为我需要沿着实时增长的时间轴绘制矩形,所以我需要为每个新帧重新绘制 GUI。 有没
下面的应用程序输出从一个 QQuickItem 映射的坐标到另一个。根据文档: object mapToItem(Item item, real x, real y) Maps the point (
我想用可拖动的 QQuickItems 编写简单的 Qt Quick 应用程序。由于项目中嵌入了 MouseArea,因此项目可以很好地拖动。但问题是鼠标事件不会在虚拟重载函数中触发到 C++ 代码中
我创建了一个基本的 QML 应用程序,它使用 QQuickView 创建 View ,并在其中包含自定义 QQuickItems。我想通过重新实现 mousepressevent(QEvent *)
我创建了一个 QPixmap 并使用 QPainter 在其上绘制了较小的 QPixmap。我想将图像用作 QQuickItem 的背景。是否有捷径可寻? 最佳答案 如果您的自定义项源自 QQuick
我使用QGraphicsItem工作了很长时间,它有transform()函数。现在我不会对 QQuickItem 做同样的事情,但不幸的是它错过了 transform() 。所以我的问题 - 如何获
我创建了一个 QPixmap 并使用 QPainter 在其上绘制了较小的 QPixmap。我想将图像用作 QQuickItem 的背景。是否有捷径可寻? 最佳答案 如果您的自定义项源自 QQuick
我有一个 C++ 类 Bar,它包含对另一个类 Foo 的实例的引用。当调用 Bar 上的方法时,我想在 Foo 实例上发出 QML 信号。我已经 20 年没有用 C++ 编写代码了,QML 用来发出
我有一个QQuickItem派生类 // Class class MyQQuickItem : public QQuickItem { Q_OBJECT } // updatePaintNode
Qt 文档中有很多关于处理模型和 View 的好资源,例如:http://doc.qt.io/qt-5/model-view-programming.html ,但我似乎找不到任何与 QtQuick
我有一个继承自 QQuickItem 的类,在里面我正在操作它的 width height 属性。我也暴露了我自己的属性。 class MyQQuickItem : public QQuickItem
我想在自定义 QQuickItem 中渲染具有很多点 (>1.000.000) 和不同颜色的绘图。 稍后我想为这些点设置动画(在坐标和颜色之间淡入淡出),所以我认为 QQuickPaintedItem
如何将QQuickItem打印到打印机? QQuickItem = 基本上任何 QML 元素,如文本或矩形,及其子元素 或者:如何将 QQuickItem 转换为位图/QImage 以进行打印? 最佳
我有兴趣通过 C++ QQuickItem 访问 qml 父项的属性。我有一个名为 VisibleTag 的自定义 QQuick 项目,它扩展了 QQuickItem。任何包含此对象标签的 qml 项
有一个 QQuickPaintedItem 带有重载的鼠标事件处理程序: void Plotter::mousePressEvent(QMouseEvent *event) { qDebug(
我在 Qtquick 上使用 OpenGL 绘图,无论我在 QML 上的 OpenGlVideoQtQuick 上放置什么尺寸,它总是占据窗口的整个空间。我希望能够控制它的大小。 我创建了这个使用 O
我想在 QQuickItem 上打开一个 QFileDialog。 void MyCoolQQuickItem::loadFileDialog() { QString filename =
我是一名优秀的程序员,十分优秀!