在 C++ 中为 QML 创建一个中等复杂的绘图类
Posted
技术标签:
【中文标题】在 C++ 中为 QML 创建一个中等复杂的绘图类【英文标题】:Creating a moderatly complex plotting class in c++ for QML 【发布时间】:2018-03-30 10:00:59 【问题描述】:我需要编写一个允许绘制 x 与 y 数据(散点图、线图)的类,并且应用程序是使用 QtQuick 完成的。应该可以显示多条曲线,并且可以根据用户选择动态添加。此外,对于共享 x 轴的不同数量的两个 y 轴应该是可能的。现在,我使用 QSGGeometryNode 将单条曲线绘制为 QQuickItem。我认为最终的绘图类应该包含这些曲线的向量以及轴和刻度,包括作为对象的标签。我想我会使用 QQuickPaintedItem 来绘制坐标轴和刻度。
但是,我对如何组织它有点迷茫(对 Qt 和 QML 不熟悉)。如果是小部件,我只会为轴创建子小部件并绘制曲线。 QtQuick 中是否有类似的可能?
【问题讨论】:
你看过qml图表模块doc.qt.io/qt-5.10/qtcharts-qmlmodule.html 是的,很遗憾我无法使用它,因为我们尝试使用 LGPL 许可证。 这些在 mit jwintz.me/blog/2014/02/15/… 下可用 【参考方案1】:好的,实际上我不知道我可以像在小部件案例中一样创建子 QQuickItems。这意味着如果我有一个 PlotCurve 对象,它是一个 QQuickItem,我会创建一个像这样的 PlotWindow 对象
#ifndef PLOTWINDOW_H
#define PLOTWINDOW_H
#include <QQuickItem>
#include "plotcurve.h"
class PlotWindow : public QQuickItem
Q_OBJECT
public:
PlotWindow();
private:
QVector<PlotCurve *> _curves;
signals:
public slots:
;
#endif // PLOTWINDOW_H
并将其添加到构造函数中(作为示例)
PlotWindow::PlotWindow()
_curves.append(new PlotCurve(this));
_curves[0]->setVisible(true);
_curves[0]->setWidth(300);
_curves[0]->setHeight(300);
我可以将轴作为 QQuickPaintedItem 并以类似的方式将它们添加到 PlotWindow 对象。
【讨论】:
您可以查看为 QWidget 编写的 QCustomPlot,但将其移植到 QtQuick 并不难。我自己做了。以上是关于在 C++ 中为 QML 创建一个中等复杂的绘图类的主要内容,如果未能解决你的问题,请参考以下文章