- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我很难将 c++ 与 qml 和 QtCharts/Chartview 结合使用。如果有任何建议,我很乐意在这里提出!
问题:我想在QML中的Chartview中添加一个用c++定义的QLineSeries。我的主要问题是将我的 c++ 类 setLineSeries()
连接到我的 qml Chartview{}
Object。
我试图通过创建一个新系列来做到这一点
var series = diabBig.createSeries(ChartView.SeriesTypeLine, "Test", diabBig.axisX(lineseries), diabBig.axisY(lineseries));
然后将这个系列对象更改为我的 c++QLineSeriesObject
series = diabetesView.setLineSeries();
是否有可能这样做,或者从 c++ 使用我的 QLineSeries(QAbstractSeries) 的预期方式是怎样的?
编辑:“如果我想做的事情不可能,这将是一个可以接受的答案,即使它不是我想读的!”
这是我的简短示例代码:
diabChart.h
#ifndef DIABCHART_H
#define DIABCHART_H
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QDateTimeAxis>
#include <QtCharts/QCategoryAxis>
#include <QDateTime>
#include <QtQuick/QQuickPaintedItem>
#include <QColor>
#include <QObject>
QT_CHARTS_USE_NAMESPACE
class DiabChart : public QObject
{
Q_OBJECT
public:
explicit DiabChart(QObject *parent = 0);
Q_INVOKABLE QAbstractSeries* setLineSeries();
};
#endif // DIABCHART_H
diabChart.cpp
#include "diabchart.h"
#include <QtCharts/QChartView>
QT_CHARTS_USE_NAMESPACE
Q_DECLARE_METATYPE(QAbstractSeries *)
Q_DECLARE_METATYPE(QAbstractAxis *)
DiabChart::DiabChart(QObject *parent)
: QObject(parent)
{
qRegisterMetaType<QAbstractSeries*>();
qRegisterMetaType<QAbstractAxis*>();
}
QAbstractSeries* DiabChart::setLineSeries()
{
QLineSeries *bloodSugarSeries = new QLineSeries();
QPen penBloodSugar;
penBloodSugar.setColor(QColor(34, 102, 102));
penBloodSugar.setWidth(5);
QDateTime xValue;
xValue.setDate(QDate(2016,7,3));
xValue.setTime(QTime(0,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 192.6);
xValue.setTime(QTime(7,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 89);
xValue.setTime(QTime(9,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 100);
xValue.setTime(QTime(12,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 50);
xValue.setTime(QTime(14,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 250);
xValue.setTime(QTime(18,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 140);
xValue.setTime(QTime(21,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 80);
xValue.setTime(QTime(23,30));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 200);
xValue.setDate(QDate(2016,7,4));
xValue.setTime(QTime(0,0));
bloodSugarSeries->append(xValue.toMSecsSinceEpoch(), 192.6);
bloodSugarSeries->setPen(penBloodSugar);
return bloodSugarSeries;
}
main.cpp
#include <QQmlApplicationEngine>
#include <QtWidgets/QApplication>
#include <QtCharts/QChartView>
#include <QtWidgets/QMainWindow>
#include <QtQuick/QQuickView>
#include <QApplication>
#include "diabchart.h"
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<DiabChart>("DiabChart", 1, 0, "DiabChart");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtCharts 2.0
import DiabChart 1.0
ApplicationWindow {
id: windowwindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
DiabChart{
id: diabetesView
}
function addseries()
{
// var xyz = diabetesView.setLineSeries();
var series = diabBig.createSeries(ChartView.SeriesTypeLine, "Test", diabBig.axisX(lineseries), diabBig.axisY(lineseries));
series.append(0,50);
series.append(4,130);
series = diabetesView.setLineSeries();
diabBig.update();
}
Column{
Rectangle{
id: infoArea1
color: "green"
width: windowwindow.width
height: windowwindow.height *0.25
MouseArea{
anchors.fill: parent
onClicked: addseries()
}
}
ChartView{
id: diabBig
width: windowwindow.width
height: windowwindow.height *0.75
title: "Line"
antialiasing: true
ValueAxis{
id: vlaueAxisX
min: 0
max: 24
tickCount: 12
labelFormat: "%2.0f:00"
}
ValueAxis{
id: valueAxisY
min:0
max: 500
tickCount: 50
}
LineSeries {
id: lineseries
axisX: vlaueAxisX
axisY: valueAxisY
name: "LineSeries"
XYPoint { id: zero; x: 0; y: 192.6}
XYPoint { id: first; x: 7; y: 89 }
XYPoint { x: 9; y: 80 }
XYPoint { x: 12; y: 30 }
XYPoint { x: 14; y: 150 }
XYPoint { x: 18; y: 40 }
XYPoint { x: 21; y: 280 }
XYPoint { id: last; x: 23.5; y: 200 }
XYPoint { id: twentyfour; x: 24; y: 192.6}
}
}
}
}
test.pro
TEMPLATE = app
QT += charts qml quick
CONFIG += c++11
SOURCES += main.cpp \
diabchart.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = #../Diabetes
# Default rules for deployment.
include(deployment.pri)
DISTFILES +=
HEADERS += diabchart.h
最佳答案
我没有使用像这样的函数QAbstractSeries* DiabChart::setLineSeries()
,而是改为:void DiabChart::setLineSeries(QLineSeries* lineSeries)
调用以更改 ChartView 输入的函数如下所示:
function addSeries()
{
//Define Axes of the ChartView
diabetesView.getAxisYDescription(yDescription);
diabetesView.getAxisXTime(xTime);
diabetesView.getAxisYValues(yValues);
// Create new LineSeries with 3 Axes (Two-Y-Axis, One-X-Axis)
var mySeries = diabChartBig.createSeries(ChartView.SeriesTypeLine, "Line", xTime, yValues);
var mySeries2 = diabChartBig.createSeries(ChartView.SeriesTypeLine, "Overview", xTime, yDescription);
// Define series on specific wishes
diabetesView.setLineSeries(mySeries);
//Delete not needed series (only created because second y-Axis
diabChartBig.removeSeries(mySeries2);
}
和具有最小设置的 ChartView-Object 如下所示:
ChartView{
id: diabChartBig
title: "Overview"
width: diabetesApplicationArea.width * 0.78
height: diabetesApplicationArea.height * 0.66
antialiasing: true
backgroundColor: "grey"
CategoryAxis{
id: yDescription
}
DateTimeAxis{
id: xTime
}
CategoryAxis{
id: yValues
}
}
结果是这样的:
关于c++ - 将 c++ QAbstractSeries 添加到 QML chartview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38467769/
我想放置一些矩形作为叠加层,以在 ScatterSeries 的 ChartView 上显示感兴趣的区域。然而,当我尝试这样做时,它显然使用了与 ScatterSeries 不同的坐标系,因为它是在一
QChart自定义背景画笔和绘图区画笔的官方示例代码:Custom chart example 如何使用 ChartView(Qml 类型)以 Qml 方式实现此目的? 我想像那个示例一样自定义 Qm
我最近开始使用 QML,我正在寻找一种方法来将数据从 C++ 提供到 QML 中的 ChartView。我更喜欢一个解决方案,我可以发送一个带有 Q_PROPERTY 之类的 QMap,以便它自动更新
我正在尝试使用条形图格式在 QLabel 小部件中绘制数据。创建图表后,我使用 chartView->grab() 捕获它以插入到 QLabel 中。这种方法适用于饼图,但对于条形图,不显示子元素(Q
我有一个在 QML 中声明的 ChartView 项,我需要类似橡皮筋的缩放功能。这可以通过半透明矩形和 MouseArea 项目来实现。问题是对于一个矩形,它只能选择从左上角到右下角的区域,因为带有
我正在尝试基于 qtcharts-qmloscilloscope-example here 制作类似 Qt Quick 应用程序的示波器 在此示例中,跟踪(QTQuick ChartView)在 QM
我有一个在 QML 中声明的 ChartView 项,我需要类似橡皮筋的缩放功能。这可以通过半透明矩形和 MouseArea 项目来实现。问题是对于一个矩形,它只能选择从左上角到右下角的区域,因为带有
我正在尝试获取对动态创建的 ChartView 对象的引用。在代码中,当我单击“添加图表”按钮时,您会看到我动态创建了一个图表作为委托(delegate)。 import QtQuick 2.12 i
我有一个由 QXYSeries 表示的散点图,并使用 Qt Charts 5.7 中的 ChartView 查看。 我想将鼠标悬停在绘图上,在一定距离内“悬停”触发,而不是仅当我的光标直接位于点上方时
我一直在关注this example尝试在 QDialog 窗口中创建折线图。而不是使用以下方法将图表添加到 UI: window.setCentralWidget(chartView); 我用这一行
我正在尝试调整 Qt5.9 QML Oscilloscope example从 C++ 推送图形数据而不是从 QML 请求图形数据。以下是 QML 示波器示例中的相关部分。 数据源.h: #ifnde
我的应用程序在 ViewPager 中有多个 Fragment。其中一个片段包含一个 ChartView,当用户滑动移动到相邻片段时,图表会重新绘制和压缩,而不是像预期的那样保持原始宽度。这也垂直发生
我有一个问题,当我在带有图表的 android 平板电脑 (android 7.0) 上启动调试时,我遇到了一个崩溃的应用程序。 所以我的 qt.pro: QT += qml quick core c
我有一个 QML 应用程序(通过属性、Q_INVOKABLE 等)链接到 C++ 代码。我可以使用 qmlscene 在没有大部分 C++ 框架的情况下启动 QML 应用程序,并且没有明显的问题(除了
我很难将 c++ 与 qml 和 QtCharts/Chartview 结合使用。如果有任何建议,我很乐意在这里提出! 问题:我想在QML中的Chartview中添加一个用c++定义的QLineSer
我正在尝试使用 python 将按需系列添加到在 qml 中定义的现有 ChartView。我找到了一个示例,展示了如何在 C++ 中执行此操作(取自 https://doc.qt.io/archiv
我的方法几乎是这样的: 图表.qml: Window { ChartView { id: chartView // ... } Button {
我正在使用图表库创建一些折线图,当没有可用数据时我希望清除图表。该图清除正常并显示其通常的“nodatatext”但是当我尝试再次设置图表时代码在设置数据的行上失败:fastestChartView.
我有一个自定义 QAbstractTableModel 和一个翻转第一个模型轴的代理模型。有了这个工作表,我只需切换模型。当我切换到图表的代理模型时,它会在我将行分配给 QHXYModelMapper
我想在 ChartView QML 对象中创建我自己的特定图表。我的期望是通过在 c++ 中指定例如 QCategoryAxis 而不是在 qml 中调用此函数来获得充分的灵 active 。 首先,
我是一名优秀的程序员,十分优秀!