- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的 C++ 课上我有
struct trackPoint {
QString lat;
QString lon;
QString elevation;
};
QVector<trackPoint> trackPoints;
在 QML 中,我想将其作为经纬度对的多维数组进行访问
[[0,1],[1,1],[2,1]]
这可以使用 Q_Property 机制吗?因为我很确定结构不能暴露给 QML?
我打平了:-
Q_PROPERTY(QVector<trackPoint> trackPoints READ gpx)
用一个方法:-
QVector<trackPoint> GPXFileIO::gpx() const {
return trackPoints;
}
但这给了我错误:-
QMetaProperty::read: Unable to handle unregistered datatype 'QVector<trackPoint>' for property 'GPXFileIO::trackPoints'
最佳答案
将结构暴露给 QML 的一种简单方法是使用 Q_GADGET 和 Q_PROPERTY,这样我们就可以获得结构的每个元素,它们不会成为数组的一部分。另一方面,QVector 支持 QString、int、QUrl 等元素,但不支持新类型,在这种情况下,应该使用 QVariantList。
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QVector>
struct TrackPoint {
Q_GADGET
Q_PROPERTY(qreal lat MEMBER lat)
Q_PROPERTY(qreal lon MEMBER lon)
Q_PROPERTY(qreal elevation MEMBER elevation)
public:
qreal lat;
qreal lon;
qreal elevation;
};
class TrackClass: public QObject
{
Q_OBJECT
Q_PROPERTY(QVariantList trackpoints READ gpx)
public:
TrackClass(QObject *parent=nullptr):QObject(parent){
trackPoints << TrackPoint{10, 10, 10} << TrackPoint{11, 11, 11};
}
QVariantList gpx() const{
QVariantList l;
for(const TrackPoint & p: trackPoints){
l << QVariant::fromValue(p);
}
return l;
}
private:
QVector<TrackPoint> trackPoints;
};
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
TrackClass track;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("track", &track);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
#include "main.moc"
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
for( var i in track.trackpoints){
var p = track.trackpoints[i];
console.log("lat: ", p.lat, "lon: ", p.lon, "elevation: ", p.elevation)
}
}
}
输出:
qml: lat: 10 lon: 10 elevation: 10
qml: lat: 11 lon: 11 elevation: 11
关于c++ - 阅读 QML 中结构的 C++ QVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806679/
如何解决以下问题,即转换 const QVector>至 QVector> ? 我尝试了一些步骤但没有帮助: QVector> points = const_cast>>(abc.points); a
我想知道 QVector> 对象中的元素总数,说 myobject .一种方法是设置一个 for 循环,如下所示: int siz; QVector temp; for(int i=0; i> 的大小
我正在编写一个程序来模拟缓存。我使用 QVector 作为结构。我有一个 QVector 的 QVectors of ints。但是,当我尝试编辑整数时,会导致运行时错误: *** glibc det
我已经声明过: //myclass.h QVector aux; QVector > tests; //myclass.cpp aux = (QVector(2)); 它工作正常,但现在我想将每个 t
我是 C++ 编程的新手,所以我可能只是遗漏了一些东西,但我已经尝试解决这个问题将近一个小时了。 我有一套 QLabels在我的 UI我想每秒更新两次。它更新的数据存储在 QVector 中尺寸为 1
我在 QT 中有以下变量: QVector > buff_d1; 我需要修改“内部” vector : buff_d1.at(i).removeFirst(); buff_d1.at(i).push_
我真的尝试了所有方法,但找不到解决方案,我尝试先初始化外部 QVector,然后初始化内部,但没有成功。 最佳答案 QVector *matrix (as class member) with new
谁能给我一个使用以下构造函数 int Qt 的例子? QVector::QVector(std::initializer_list args); 最佳答案 采用 std::initializer_li
为了完成这项工作,我真的尝试结合我所知道的一切。相信目前的结构不会出现死锁或其他线程问题。然而,有些部分丢失了,可用的文档对我没有帮助(我没有使用 C++ 文档的经验)。 int main() {
我试图将 100 000 个 QString 元素(每个 QString 中大约有 10 个字符)附加到 QVector。之后程序失败。 QVector 可以包含多少个元素是否有一些限制(当然除了物理
我有一个 QVector对于一个结构体,结构体包含许多属性,有些是 int,有些是指向类的指针。和每个 TheCore将绑定(bind)到 QTabWidget 中的选项卡. struct TheCo
如何制作动态数量的小部件的 QVector(或其他一些容器类),例如 QPushButton 或 QComboBox Qt 4? 我在窗口类的构造函数中使用了以下内容: QVector foo; //
这个问题在这里已经有了答案: How does the Comma Operator work (9 个回答) 关闭 6 年前。 我正在尝试分配 QVector 的一部分Qt 中的 double 组
我遇到了问题。 出于某种原因,尽管我在 QString 中有一个值,但对 QVector 执行 append() 不起作用,我最终仍然只有一个空 vector 。 QList listServ
假设我有一个 QVector 存储这些元素:{3, 4, 1, 5, 6}。所以如果我从不同的线程读取每个元素,这会导致错误共享吗? (“读取”的意思是这样的:int i = vector[0];//
我正在尝试创建一个多维数组(C++ 数组类)的 QVector,但我遇到了麻烦 我有一个“节点”类,我想将多维数组的 QVector 作为节点类构造的参数传递,但这不起作用,我遇到了编译错误! Cla
所以我正在尝试创建一个简单的程序,允许我使用随机函数来操纵 vector ,但我觉得我忘记了一些相当重要和基本的东西请随时查看我发布的代码,让我知道解决方案是什么。我收到的错误是 myvec 是“索引
Qt 容器在被多线程使用时作为只读是安全的。但是写访问呢?我可以调整 QVector 的大小并在不同的线程中使用 operator[] 进行写入吗? QVector 的大小将保持不变,每个线程将写入不
我正在尝试将 QVector 与名为 RoutineItem 的自定义对象一起使用。 但是报错: C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265
我可以看到类被视为调用默认构造函数所需的复杂对象: void QVector::defaultConstruct(T *from, T *to) { if (QTypeInfo::isComp
我是一名优秀的程序员,十分优秀!