我创建了一个简单的Qt快速应用程序,我有一个使用QQuickPaintedItem绘制的问题。 如果调用了paint,我检查了调试模式,但没有。 无论如何,这是我的代码:
来源:
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);
答案 0 :(得分:7)
尝试设置自定义项目的宽度和高度。
import QtQuick 2.0
import Fizika 1.0
Rectangle
{
width: 360
height: 360
Particle
{
width: 100
height: 100
radius: 20
x: 100
y: 200
color: "red"
}
}
答案 1 :(得分: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
}
}
答案 2 :(得分:1)
请务必在某个时刻致电update()
,这将安排重新绘制。
作为一个不相关的注释,请注意线程 - 从渲染线程调用paint(),因此需要对particle
之类的东西进行适当的同步。
答案 3 :(得分:0)
尝试在类声明后添加此行
QML_DECLARE_TYPE(ParticleHandler)