3

簡単な Qt クイック アプリケーションを作成しましたが、QQuickPaintedItem での描画に問題があります。ペイントが呼び出されるかどうかをデバッグモードでチェックしましたが、そうではありません。とにかく、ここに私のコードがあります:

ソース:

ParticleHandler::ParticleHandler(QQuickPaintedItem *parent) : QQuickPaintedItem(parent)
{
    setFlag(QQuickItem::ItemHasContents);
    particle = new Particle();
}
void ParticleHandler::paint(QPainter *painter)
{
    QPen pen = QPen(m_color);
    painter->setPen(pen);
    painter->setRenderHints(QPainter::Antialiasing, true);
    painter->drawEllipse(particle->Position.x,particle->Position.y,particle->Radius/2,particle->Radius/2);
}

ヘッダ:

ParticleHandler(QQuickPaintedItem *parent = 0);
void paint(QPainter *painter);
4

4 に答える 4

2

主な問題が何であるかは、コードの残りの部分を見ないと明らかではありませんが、完全に自己完結型の例を次に示します。多分それは助けになるでしょう。

#include <QGuiApplication>
#include <QPainter>
#include <QtQuick>

class PaintedItem : public QQuickPaintedItem {
    Q_OBJECT
public:
    PaintedItem(QQuickItem *parent = 0) : QQuickPaintedItem(parent) {
    }

    void paint(QPainter *painter) {
        painter->fillRect(contentsBoundingRect(), Qt::red);
    }
};

int main(int argc, char *argv[])
{
    QGuiApplication a(argc, argv);

    qmlRegisterType<PaintedItem>("mymodule", 1, 0, "PaintedItem");

    QQuickView view(QUrl("qrc:///qml/main.qml"));
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.resize(500, 500);
    view.show();

    return a.exec();
}

#include "main.moc"

そして、main.qml の内容:

import QtQuick 2.0
import mymodule 1.0

Rectangle {
    color: "black"

    PaintedItem {
        anchors.centerIn: parent
        width: 50
        height: 50
    }
}
于 2013-10-20T18:10:21.707 に答える
1

update()再描画をスケジュールするある時点で必ず電話してください。

無関係な補足事項として、スレッド化には注意してください。paint() はレンダー スレッドから呼び出されるため、particle.

于 2013-10-20T20:34:54.737 に答える
0

クラス宣言の後にこの行を追加してみてください

QML_DECLARE_TYPE(ParticleHandler)

于 2013-11-13T04:13:18.667 に答える