Я пытаюсь настроить текст на кнопках моего пользовательского диалога.
Для этого я использовал DialogButtonBox в качестве нижнего колонтитула диалога, вместе с некоторыми загрузчиками, которые будут загружать соответствующие кнопки, выбранные пользователь.
Однако я вижу, что для некоторых всплывающих окон кнопки располагаются в крайнем левом углу, и вы не можете нажимать на них. Мне удалось воспроизвести его на небольшом примере:
main.qml
import QtQuick 2.12
import QtQuick.Window 2.2
import QtQuick.Controls 2.4
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Row{
anchors.centerIn: parent
Button{
property var popup: SimDialog { }
onClicked:
{
popup.open()
}
text: "Open"
}
}
}
SimDialog.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
Dialog {
// ID
id: popupRoot
width: 500
height: 200
topMargin: 20
bottomMargin: 10
leftMargin: 20
rightMargin: 10
// Centered position
x: parent ? parent.x + (parent.width / 2) - (width / 2) : 0// align horizontally centered
y: parent ? parent.y + (parent.height / 2) - (height / 2) : 0// align vertically centered
modal: true
focus: true
clip: true
property int buttons: Dialog.Close | Dialog.Ignore
title: "Test"
Button
{
anchors.centerIn: parent
text: "HELLO"
}
// personalized dialog box buttons so we can translate the button text.
footer: DialogButtonBox {
id: dialogBox
alignment: Qt.AlignRight
Loader
{
active: buttons & Dialog.Help
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Help")
DialogButtonBox.buttonRole: DialogButtonBox.HelpRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Discard
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Continue without saving")
DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Save
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Save")
DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Ignore
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Ignore")
DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Apply
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Apply")
DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Ok
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Ok")
DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Close
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Close")
DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
flat: true
}
}
Loader
{
active: buttons & Dialog.Cancel
sourceComponent:
Button {
parent: dialogBox
text: qsTr("Cancel")
DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
flat: true
}
}
}
}
Обратите внимание, что в моем реальном приложении у меня есть несколько из этих всплывающих окон, и только некоторые из них имеют такое поведение. Я не смог определить сходство между теми, кто не работает, поэтому я действительно потерян.
Вот как это выглядит на моем конце