0
私は非常に助けに感謝します!Qt5とQML:ウィジェットのサイズ変更後にQQuickPaintedItemを更新するには?
QQuickPaintedItemから継承したカスタムオブジェクトを作成し、それをQMLアプリケーションに送信します。
問題はありますが問題はあります。
ウィジェットが独自のサイズを変更するたびに縮尺変更されたイメージを再描画する必要があります。 しかし、私はCでそれを作る方法を得ることができません+ +。これはpaintメソッドを1回だけ呼び出します。
提案がありますか?
ソースコード: 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
}
}
}
}
「自分のサイズを変更する」とはどういう意味ですか?前回チェックしたときにアイテムのサイズが変更されると、 'paint()'関数が自動的に呼び出されます。 – Mitch
よく、qDebugを挿入したとき<< <<絵画!ペイント法には最初から一度だけ印刷されていました。 アプリケーションウィンドウの幅や高さを変更すると、魚のように静かになります。 – ArcticNoise
そして、すべての再描画時にディスクからイメージをロードしないでください! – peppe