イメージにマスクを適用して円形にするときはいつでも、UIエレメントのアラインメントが壊れます。イメージは、いくつかのピクセル数だけ右にオフセットされます。イメージブレイクアライメントにマスクを適用する
// main.qml
import QtQuick 2.8
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Example")
Page1Form {
}
}
// Page1Form.qml
import QtQuick 2.8
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
Item {
RowLayout {
id: playerRowLayout
Layout.alignment: Qt.AlignLeft
Layout.fillWidth: true
RoundedImage {
id: displayImage
width: 50
height: 50
Layout.preferredWidth: 50
Layout.preferredHeight: 50
source: "Images/DisplayPicture.jpeg"
sourceSize.width: width
sourceSize.height: height
}
Text {
id: playerText
text: qsTr("Hameer Abbasi (Pro)")
font.family: "Source Sans Pro"
font.pixelSize: 12
}
}
}
// RoundedImage.qml
import QtQuick 2.8
import QtGraphicalEffects 1.0
Image {
id: img
property bool rounded: true
property bool adapt: true
layer.enabled: rounded
layer.effect: OpacityMask {
maskSource: Rectangle {
anchors.centerIn: parent
width: adapt ? img.width : Math.min(img.width, img.height)
height: adapt ? img.height : Math.min(img.width, img.height)
radius: Math.min(width, height)*0.5
}
}
}
私はそうのように、位置ずれが消え、Image
にRoundedImage
を変更します。私はOpacityMask
にanchors.fill: img
またはanchors.centerIn: img
を追加するときに、私が得る、また
次の結果(あなたが見ることができるように、ミスアライメントは消えずに動きました):
がが動作するようには思えないことを唯一のものは、テキストボックスにanchors.right: displayImage.left
を設定し、何とかハックのように思えるし、私は右何とか何かをやっていないよように私は感じることです。誰かが問題がどこにあるのか、これを修正するための「適切な」方法は何かを理解するのに役立つことができますか?
私は 'width'と' Layout.preferredWidth'(それぞれの高さ)を一緒に使うべきではないと思います。あなたのエフェクトの['sourceRect'](http://doc.qt.io/qt-5/qml-qtquick-item.html#layer.sourceRect-prop)の設定を検討してください。 – derM
derM 'layer.sourceRect:img.childrenRect'を追加しても問題は解決されませんでした。あなたが意図したものなのかどうかは分かりません。 –
そういうもの。ちょうどそれを試してみる時間を見つけました。それは本当に不思議です...私は分かりません - あなたはレイアウトのものを落としてアンカーと通常の 'Row'sの代わりに行くかもしれませんか? – derM