- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想向基于 C++ 模型的 QML ChartView 添加线条和点。
在 QML 中我做了以下事情:
ChartView {
id: chart
DateTimeAxis {
id: axisX
format: "HH:mm:ss"
min: new Date()
}
ValueAxis {
id: axisY
min: 0
max: 200
}
VXYModelMapper {
id: modelMapper
model: lineModel // QStandardModel in C++
series: line
firstRow: 1
xColumn: 1
yColumn: 2
}
}
在 C++ 中我做了以下事情:
lineModel = new QStandardItemModel;
static const QHash< int, QByteArray > lineRoles {
{ 0, "id" },
{ 100, "x" },
{ 101, "y" }
};
lineModel->setItemRoleNames( lineRoles );
QStandardItem *line = new QStandardItem("Temp");
lineModel->appendRow(line);
line->setData(100, 10);
line->setData(101, 50);
重点永远不会出现。是因为ChartView的xColumn和yColumn不对吗?还是我错误地将点添加到模型?
最佳答案
VXYModelMapper要求模型有多个列,例如在您的情况下,您设置属性 xColumn: 1
指示它是第二列和 yColumn: 2
这是第三列,但您的模型只有一列(模型中的索引从 0 开始)。
一个例子:
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QStandardItemModel>
#include <QDateTime>
int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication app(argc, argv);
QStandardItemModel lineModel(100, 3);// 100 rows and 3 columns
for (int row = 0; row < lineModel.rowCount(); row++) {
QStandardItem *item1 = new QStandardItem(QString::number(row));
QDateTime time = QDateTime::currentDateTime().addSecs(row);
QStandardItem *item2 = new QStandardItem(QString::number(time.toMSecsSinceEpoch()));
QStandardItem *item3 = new QStandardItem(QString::number(row*row));
lineModel.setItem(row, 0, item1);
lineModel.setItem(row, 1, item2);
lineModel.setItem(row, 2, item3);
}
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("lineModel", &lineModel);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
import QtCharts 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ChartView {
anchors.fill: parent
id: chart
DateTimeAxis {
id: axisX
format: "HH:mm:ss"
}
ValueAxis {
id: axisY
min: 0
max: 10000
}
LineSeries{
id: line
axisX: axisX
axisY: axisY
}
VXYModelMapper {
id: modelMapper
model: lineModel // QStandardModel in C++
series: line
firstRow: 1
xColumn: 1
yColumn: 2
}
}
}
在下面的链接中,您可以找到完整的 example .
PySide2:
import os
import sys
from PySide2 import QtCore, QtGui, QtWidgets, QtQml
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
lineModel = QtGui.QStandardItemModel(100, 3)
for row in range(lineModel.rowCount()):
item1 = QtGui.QStandardItem()
item1.setData(row, QtCore.Qt.DisplayRole)
time = QtCore.QDateTime.currentDateTime().addSecs(row)
item2 = QtGui.QStandardItem()
item2.setData(time.toMSecsSinceEpoch(), QtCore.Qt.DisplayRole)
item3 = QtGui.QStandardItem()
item3.setData(row**2, QtCore.Qt.DisplayRole)
lineModel.setItem(row, 0, item1)
lineModel.setItem(row, 1, item2)
lineModel.setItem(row, 2, item3)
engine = QtQml.QQmlApplicationEngine() ;
engine.rootContext().setContextProperty("lineModel", lineModel);
engine.load(QtCore.QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__), "main.qml")))
if not engine.rootObjects():
sye.exit(-1)
sys.exit(app.exec_())
关于c++ - 如何将 VXYModelMapper 与 QStandardItemModel 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48687705/
我的问题是,在使用时 QStandarditemmodel::setData(const QModelIndex &index, const QVariant &value, int role) 似乎
我是 qt 的新手,我在 QTtableview 中使用 QStandardItemModel。 请建议, 如何更改行和列标题名称。目前它显示 1,2,3,4 如何让 QStandardItemMod
我有一个 QTableView ,填充了 QStandardItemModel . 我经常通过网络更新模型,模型也由用户直接通过 QTableView 更新。 . 现在我喜欢在用户更改一些数据时调用一
我喜欢制作我的 QStandardItemModel 来填充 qtreeview 中的项目将行追加到 View 中所有已定义项目的顶部。类似于 twitter View ,新项目优先。我在 QStan
为了在 QTableView 中显示一些数据,我使用一个函数来计算 QStandardItemModel 并将其发送回调用函数。 函数调用: QStandardItemModel MyModel =
QStandardItemModel::QStandardItemModel(QObject * parent = 0) Constructs a new item model with the g
标题没问题,但我只有三个空行。 永远不会调用 FileConfig::data 方法! 你知道为什么吗? model= new MyModel; model->setHeaderData(0, Qt:
我是 Qt 的初学者,我正在努力从 XML 文件填充 QStandardItemModel。 我尝试了以下操作,整个项目运行成功,但 QtableView 不显示数据。 这是我的main.cpp: v
我试过使用 Qt void QStandardItem::insertRow(int row, const QList &items)和 void QStandardItem::appendRow(c
我想做的是,我想制作一个带有可检查项目的 ListView 。我能够使用 QStandardItemModel 作为我的模型来做到这一点。现在我需要做的是添加一些需要自定义数据方法的功能。因此,正如我
我有一个包含 100,000 条数据记录的 QStandardItemModel,以及一个用于过滤和排序功能的 QSortFilterProxyModel。我想根据其中一列的值删除大量记录,比如 10
我有一个 QStandardItemModel,它显示在 q QTreeView 中。工作正常。 为了突出显示相关行,我想突出显示其中的一些行:因此我有一个 QStringList,其中包含要突出显示
如何将 BundleItem 类的项附加到 QListView 的 QStandardItem 模型?当附加它们时,我只想使用 BundleItem 的 Name 属性显示在 ListView 中。我
当分配在堆栈上的 QStandardItemModel 被销毁时,模型中的指针指向的对象会发生什么(例如 item/ item2 指针,如下例所示): QStandardItem* item = ne
有没有办法将 QStandardItemModel 复制到另一个 QStandardItemModel? 或者我必须遍历每个项目并将其附加到另一个模型? 最佳答案 一件元素只能由一个模型拥有。这就是为
目前,我想更新 QStandardItemModel 中的行项目,不会丢失相应 QTableView 中的排序顺序和行选择。 我测试了两种方法: 通过 clear() 清除模型并重新添加行会“破坏”包
我试图删除 QTableView 的所有选定索引, 现在我使用: foreach (const QModelIndex & idx, model->selectionModel()->selected
目前,我想更新 QStandardItemModel 中的行项目,不会丢失相应 QTableView 中的排序顺序和行选择。 我测试了两种方法: 通过 clear() 清除模型并重新添加行会“破坏”包
我正在创建一个应用程序,我需要使用另一个类(class)提供给我的列表来制作 list 。用户将选中他们想要的项目旁边的复选框,然后单击按钮。对于那些已检查的行,我想打印“您检查了号码 ___”。在相
我正在尝试使用 QTreeView 和 QStandardItemModel 在 PyQt4 中实现帐户结构(带有子帐户)。经过大量的试验和错误,我终于准备好了 TreeView 。现在,我希望当我单
我是一名优秀的程序员,十分优秀!