C++ Qt quick 2绘制方法不适用于';我没接到电话
我创建了一个简单的Qt快速应用程序,我有一个关于QQuickPaintedItem的问题。 我在调试模式下检查了画图是否被调用,但没有。 无论如何,这是我的代码: 资料来源:C++ Qt quick 2绘制方法不适用于';我没接到电话,c++,qt,qml,C++,Qt,Qml,我创建了一个简单的Qt快速应用程序,我有一个关于QQuickPaintedItem的问题。 我在调试模式下检查了画图是否被调用,但没有。 无论如何,这是我的代码: 资料来源: ParticleHandler::ParticleHandler(QQuickPaintedItem *parent) : QQuickPaintedItem(parent) { setFlag(QQuickItem::ItemHasContents); particle = new Particle();
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);
如果看不到代码的其余部分,就不清楚主要问题是什么,但这里有一个完全独立的示例。也许会有帮助
#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"
确保在某个时刻调用
update()
,这将安排重新绘制
另一个不相关的注意事项是,请注意线程-paint()是从渲染线程调用的,因此您需要对
粒子之类的内容进行适当的同步,请尝试设置自定义项的宽度和高度
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"
}
}
尝试在类声明后添加此行
QML_声明_类型(ParticleHandler)
除了构造器中的差异外,它基本上看起来像您的代码:setFlag(QQuickItem::ItemHasContents);粒子=新粒子();你确定你的构造函数被调用了吗?也就是说,你在注册你的类型时没有问题吗?这个标志是不相关的,因为QQuickPaintedItem在它的构造函数中设置了这个标志本身。我正在检查它是否被调用,它是否被调用。如果没有看到更多的代码,很难提供帮助。您可以在注册类型和实际QML的地方共享代码吗?我应该在哪里调用更新
?在构造函数中调用Update()来触发第一次绘制,然后在需要重新绘制时调用Update(),将Update()添加到构造函数中,但绘制未被触发。太可怕了,在介绍了宽度和高度之后,不知何故对我很有用。
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"
}
}