QPainterPath的等价物是什么? < >为了将C++编写的一个GUI接口与Qt库转换为QML,我必须在QML找到一个替代QPainterPath的方法。实际上,现在,在GUI接口中绘制了一组形状,而C++代码在某些事件发生时修改这些对象的颜色。QPainterPath对象用于存储这些形状 如果你能告诉我如何在QML画布中画两个矩形对象,然后如何修改它们在C++代码中的填充颜色,我会很感激。在下一部分中,我将展示一个示例,其中颜色可以通过生成随机颜色并由QTimer调用的方法从C++更改:

QPainterPath的等价物是什么? < >为了将C++编写的一个GUI接口与Qt库转换为QML,我必须在QML找到一个替代QPainterPath的方法。实际上,现在,在GUI接口中绘制了一组形状,而C++代码在某些事件发生时修改这些对象的颜色。QPainterPath对象用于存储这些形状 如果你能告诉我如何在QML画布中画两个矩形对象,然后如何修改它们在C++代码中的填充颜色,我会很感激。在下一部分中,我将展示一个示例,其中颜色可以通过生成随机颜色并由QTimer调用的方法从C++更改:,c++,qt,qml,qt5,qpainterpath,C++,Qt,Qml,Qt5,Qpainterpath,main.cpp #include <QColor> #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include <QTime> #include <QTimer> class ColorProvider: public QObject{ Q_OBJECT Q_PROPERTY(QCo

main.cpp

#include <QColor>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QTime>
#include <QTimer>

class ColorProvider: public QObject{
    Q_OBJECT
    Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
public:

    QColor color() const{
        return mColor;
    }
    void setColor(const QColor &color){
        if(color == mColor)
            return;
        mColor = color;
        emit colorChanged(mColor);
    }

    Q_INVOKABLE void randomColor(){
        qsrand((uint)QTime::currentTime().msec());
        setColor(QColor(qrand() % 256, qrand() % 256, qrand() % 256));
    }

signals:
    void colorChanged(const QColor &color);
private:
    QColor mColor;
};

#include "main.moc"

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    ColorProvider obj;

    QTimer timer;
    QObject::connect(&timer, &QTimer::timeout, &obj, &ColorProvider::randomColor);
    timer.start(100);

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("colorProvider", &obj);
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

完整的示例可以在下面找到。

您可以使用
矩形
绘制两个矩形。您可以通过更改其
颜色
属性来修改颜色。你不想用C++代码来做这个。你不想用C++代码来改变QML创建的对象。请看:@:这不是一个选择,我必须从C++中修改颜色,因为我正在用ROS接口GUI。(收到特殊信息时,必须更改颜色)。我必须使用画布对象,因为我想要绘制的形状比简单的矩形复杂得多。我不想向下投票,我真的很想知道,如果这对你来说很明显,你为什么不帮我解决这个问题@我在你发布的链接中找不到任何与我想做的事情相关的东西。我遗漏了什么吗?看到了吗
import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Canvas {
        id:canvas
        anchors.fill: parent
        onPaint:{
            var ctx = canvas.getContext('2d');
            ctx.lineWidth = 4
            ctx.fillStyle = "orange"
            ctx.strokeStyle = "red"
            ctx.fillRect(50, 40, 100, 100)
            ctx.stroke()
            ctx.fill()

            ctx.lineWidth = 10
            ctx.fillStyle = colorProvider.color
            ctx.fillRect(150, 150, 300, 300)
            ctx.stroke()
            ctx.fill()

            ctx.roundedRect(20, 20, 40, 40, 10, 10)
        }
    }

    Connections {
        target: colorProvider
        onColorChanged: canvas.requestPaint()
    }
}