0
我将非常感谢您的帮助!Qt5和QML:小部件调整大小后如何更新QQuickPaintedItem?
我创建了一个自定义对象,继承自QQuickPaintedItem并将其发送给QML应用程序。
它很好,但有一些问题。
每次小部件更改它自己的大小时,我都需要重新绘制缩放图像。 但我不明白如何在C++中使用它。它只调用一次paint方法。
有什么建议吗?
源代码: myimage.h
#ifndef MYIMAGE_H
#define MYIMAGE_H
#include <QQuickPaintedItem>
#include <QQuickItem>
#include <QPainter>
class MyImage : public QQuickPaintedItem
{
Q_OBJECT
public:
explicit MyImage(QQuickItem *parent = 0);
void paint(QPainter* painter) override;
signals:
public slots:
};
#endif // MYIMAGE_H
myimage.cpp
#include "layerimage.h"
MyImage::MyImage(QQuickItem *parent) : QQuickPaintedItem(parent)
{
setImplicitWidth(600);
setImplicitHeight(600);
}
void MyImage::paint(QPainter *painter)
{
QImage firstImage("e:/image1.png");
QImage secondImage("e:/image2.png");
secondImage = secondImage.mirrored(false, true);
firstImage = firstImage.scaled(width(), height(),Qt::KeepAspectRatio);
secondImage = secondImage.scaled(width(), height(),Qt::KeepAspectRatio);
painter->drawImage(0,0, firstImage);
painter->setOpacity(0.5);
painter->drawImage(0,0, secondImage);
}
的main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "myimage.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<MyImage>("CustomImage", 1, 0 , "MyImage");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml
import QtQuick 2.5
import QtQuick.Controls 1.3
import CustomImage 1.0
ApplicationWindow {
visible: true
width: 900
height: 900
minimumWidth: 900
minimumHeight: 480
title: qsTr("Checker")
Rectangle
{
id: image
color: "transparent"
border.color: "red"
anchors
{
margins: 20
centerIn: parent
fill: parent
}
MyImage
{
anchors
{
centerIn: parent
}
}
}
}
Okey。
你是什么意思“改变自己的大小”?上次检查时,调整项目大小时会自动调用paint()函数。 – Mitch
好吧,当我插入qDebug <<“绘画!”进入油漆方法它只被打印一次 - 在开始。 如果我改变应用程序窗口的宽度或高度,它会像鱼一样沉默。 – ArcticNoise
请不要在每次重新绘制时从磁盘加载图像! – peppe