首页| 论坛| 消息
主题:C++中使用quickshapes模块的私有接口
lieber发表于 2023-05-07 13:40
小弟目前在开发一个图形的功能,界面采用qml制作,几何算法用C++编写。
但是要把曲线结果显示出来的时候要传一堆参数到qml里面去,于是乎试了自定义的QQuickItem::updatePaintNode,但是效果一般。最近看到私有接口的使用,感觉难度会低一点,结果显示不出来。
需要说明的是,界面由于缩放,用QQuickPaintedItem会糊的很。骚操作的代码如下,还请论坛的各位大哥指点指点#include "QmlElementsItem.h"
#include
#include
QmlElementsItem::QmlElementsItem(QQuickItem *parent)
: QQuickItem(parent)
{
setFlag(ItemHasContents);
setAntialiasing(true);
}
void QmlElementsItem::setData(const ContourElements &elements)
{
QQuickShape* shape = new QQuickShape(this);
for (int i = 0; i < elements.size(); ++i) {
QQuickShapePath* path = new QQuickShapePath(shape);
path->setStrokeColor(QColor(255, 0, 0));
path->setStrokeWidth(3.0);
QQuickShapePathPrivate* path_p = QQuickShapePathPrivate::get(path);
switch (elements[i]->Type()) {
case 1: {
QSharedPointer segment = elements[i].dynamicCast();
path->setStartX(segment->GetStart().X());
path->setStartY(segment->GetStart().Y());
QQuickPathLine* line = new QQuickPathLine(path);
line->setX(segment->GetEnd().X());
line->setY(segment->GetEnd().Y());
path_p->_pathCurves.append(line);
break;
}
case 5: {
QSharedPointer bezier = elements[i].dynamicCast();
path->setStartX(bezier->GetCurveP1().X());
path->setStartY(bezier->GetCurveP1().Y());
QQuickPathCubic* cubic = new QQuickPathCubic(path);
cubic->setX(bezier->GetCurveP2().X());
cubic->setY(bezier->GetCurveP2().Y());
cubic->setControl1X(bezier->GetCtrlP1().X());
cubic->setControl1Y(bezier->GetCtrlP1().Y());
cubic->setControl2X(bezier->GetCtrlP2().X());
cubic->setControl2Y(bezier->GetCtrlP2().Y());
path_p->_pathCurves.append(cubic);
break;
}
}
QQuickShapePrivate* shape_p = QQuickShapePrivate::get(shape);
shape_p->sp.append(path);
}
}
回帖(2):
2楼:20091001753兄弟看到你这个帖子又该纠结了
1楼:看了Qt的qtlocation部分源码,QQuickPath添加到QQuickShape的接口用错了,此贴终结。
不得 ..

全部回帖(2)»
最新回帖
收藏本帖
发新帖