Кнопка QtQuick отображается за пределами диалогового окна

Я пытаюсь создать настраиваемое диалоговое окно с сообщением об ошибке с одной кнопкой в ​​QtQuick, но когда я открываю диалоговое окно, кнопка «ОК» отображается за его пределами:

это выглядит так

Когда я снова открываю диалог, он работает нормально, кнопка отображается в нужном месте.

Вот минимальный рабочий пример:

import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.4

Window {
visible: true
width: 640
height: 480

   Button {
        text: "Open Dialog"
        onClicked: {
            dialog.show("This text can be customized.")
      }

    Dialog {

        id: dialog
        standardButtons: Dialog.Ok
        title: "Error"
        modal: true

        function show(txt) {
            label.text = txt
            open()
        }

        Label {
            id: label
        }
    }
  }
}

Я использую Qt 5.11.3 с QtQuick 2.11, целью сборки является 64-разрядная версия GCC для настольных компьютеров.

Это ошибка? Что я делаю не так?


person tourdetour    schedule 09.06.2020    source источник
comment
ваш пример воспроизводит ошибку? потому что кнопка выглядит хорошо для меня!   -  person luffy    schedule 10.06.2020
comment
О, это странно. Я только что создал новое приложение Qt Quick - Empty в QtCreator, вставил пример в main.qml, и ошибка есть. Я запускаю приложение в Linux. Я также тестировал на Android, ошибка там тоже. На какой ОС вы тестировали @luffy?   -  person tourdetour    schedule 10.06.2020
comment
Кроме того, это происходит только в Qt 5.11.3, я только что попробовал Qt 5.14, ошибки там нет (с той же версией QtQuick и QtQuick.Controls!)   -  person tourdetour    schedule 10.06.2020
comment
Я тестировал на Windows 10. Попробую протестировать на Linux. У меня Ubuntu 18 работает на виртуальной машине   -  person luffy    schedule 10.06.2020
comment
что означает Item внутри Window? этот элемент здесь не имеет смысла, более того, поскольку он не имеет размера, это может привести к неправильному позиционированию вложенных элементов. Также Button должно быть в (0,0), так как вы не определяете для него какую-либо позицию. Поэтому похоже, что ваш пример кода не соответствует предоставленному вами изображению.   -  person folibis    schedule 10.06.2020
comment
Предмет действительно бесполезен, я его удалил, но это ничего не меняет. Кроме того, кнопка действительно находится в (0,0), это кнопка для запуска диалога. Затем диалоговое окно появляется в (0,0), потому что для него не определены координаты. Но неправильно размещенная кнопка — это кнопка «ОК» диалогового окна, сгенерированная стандартными кнопками: Dialog.Ok @folibis   -  person tourdetour    schedule 10.06.2020


Ответы (1)


Кажется, это ошибка в Qt 5.11.3 или в моей установке на Linux.

Вот обходной путь, который я использовал, в основном воссоздавая диалоговое окно из обычного всплывающего окна:

import QtQuick 2.0
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3

Popup {
    x: (parent.width-width)/2
    y: (parent.height-height)/2
    modal: true
    closePolicy: Popup.NoAutoClose

    property var title: "Error"
    property var msg: ""

    function show(message) {
        msg = message
        open()
    }

    ColumnLayout {
        spacing: 30

        Label {
            Layout.alignment: Qt.AlignLeft
            Layout.preferredHeight: 5

            font.bold: true
            text: title

        }

        Label {
           text: msg
        }

        Button {
            Layout.alignment: Qt.AlignRight
            text: "Ok"
            onClicked: {
                close()
            }
        }

    }
}
person tourdetour    schedule 11.06.2020