すべてのダイアログは、画面の中央ではなく左上隅に表示されます。
ダイアログを自動的に正しく配置するための最良の方法は何ですか?
import QtQuick 2.7
import QtQuick.Controls 2.2
ApplicationWindow {
id: mainWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
showMessageBox('Hey this actually works!');
}
function showMessageBox(message) {
var component = Qt.createComponent("MessageDialog.qml")
if(component.status == Component.Ready) {
var dialog = component.createObject(mainWindow)
dialog.title = qsTr("Information")
dialog.text = message
dialog.open()
} else
console.error(component.errorString())
}
}
非常に単純なMessageDialog.qmlの場合:
import QtQuick 2.7
import QtQuick.Controls 2.2
Dialog {
standardButtons: DialogButtonBox.Ok
property alias text : textContainer.text
Text {
id: textContainer
anchors.fill: parent
horizontalAlignment: Qt.AlignLeft
verticalAlignment: Qt.AlignTop
}
}
ドキュメントは、 Dialog
が Popup
の子孫であり、 _x/y
_ -座標。
それらはそれを位置付ける良いスタートになると思います。
あなたの役に立つ:
parent.width
_-これはウィンドウの幅である必要がありますwidth
-これは、Dialog
sの幅になりますparent.height
_height
正しい位置を計算すれば、大丈夫です。
これにより、新しい基本クラス_CenteredDialog.qml
_を作成できます。
_Dialog {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
}
_
そして、常にCenteredDialog
の代わりにDialog
を使用します。
さらに、動的インスタンス化の場合、ファイルでComponent
を宣言し、component.createObject(parentObject, { property1Name : property1Value, property2Name : property2Value ... })
構文を使用してインスタンス化時にのみプロパティを設定できます。
(derMが言ったように)x/y位置を設定できますが、ApplicationWindowのすべてのサイズ変更を再計算する必要があります!
別の解決策は次のとおりです。
ApplicationWindow {
id: mainWindow
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
showMessageBox('Hey this actually works!');
}
Item {
anchors.centerIn: parent
width: msgDialog.width
height: msgDialog.height
MessageDialog {
id: msgDialog
title: qsTr("Information")
visible: false
}
}
function showMessageBox(message) {
msgDialog.text = message
msgDialog.visible = true
}
更新:動的インスタンス化あり:
Item {
id: dialogParent
anchors.centerIn: parent
}
function showMessageBox(message) {
var component = Qt.createComponent("MessageDialog.qml")
if(component.status === Component.Ready) {
var dialog = component.createObject(dialogParent)
dialog.title = qsTr("Information")
dialog.text = message
dialog.open()
dialogParent.width = dialog.width
dialogParent.height = dialog.height
} else {
console.error(component.errorString())
}
}