Кнопки DialogButtonBox выглядят сложенными - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь настроить текст на кнопках моего пользовательского диалога.

Для этого я использовал 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
                }
        }
    }
}

Обратите внимание, что в моем реальном приложении у меня есть несколько из этих всплывающих окон, и только некоторые из них имеют такое поведение. Я не смог определить сходство между теми, кто не работает, поэтому я действительно потерян.

Вот как это выглядит на моем конце enter image description here

1 Ответ

0 голосов
/ 15 января 2020

вам не нужны загрузчики. Вы можете просто использовать свойство visible в Button. Это сработало для меня, как и ожидалось:

// personalized dialog box buttons so we can translate the button text.
    footer: DialogButtonBox {
        id: dialogBox

        Button {
            text: qsTr("Help")
            DialogButtonBox.buttonRole: DialogButtonBox.HelpRole
            flat: true
            visible: true //false
        }

        Button {
            text: qsTr("Continue without saving")
            DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
            flat: true
        }

        Button {
            text: qsTr("Save")
            DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
            flat: true
        }

        Button {
            text: qsTr("Ignore")
            DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
            flat: true
        }

        Button {
            text: qsTr("Apply")
            DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
            flat: true
        }

        Button {
            text: qsTr("Ok")
            DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
            flat: true
        }

        Button {
            text: qsTr("Close")
            DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
            flat: true
        }

        Button {
            text: qsTr("Cancel")
            DialogButtonBox.buttonRole: DialogButtonBox.RejectRole
            flat: true
        }
    }
...