我想表現出一定的條件下Dialog
onCompleted
一個對話框onCompleted不工作(處理這種狀況略 - 一個簡單的if
條款)顯示如預期
main.qml
:
import QtQuick 2.2
import QtQuick.Controls 1.0
ApplicationWindow
{
id: appWindow
width: 480
height: 640
visible: true
StackView
{
id: stackView
anchors.fill: parent
// Implements back key navigation
focus: true
initialItem: Item
{
width: parent.width
height: parent.height
Button { onClicked: dialog.open() }
// ...
Component.onCompleted: dialog.open()
}
}
MyDialog {id: dialog }
}
MyDialog。 qml
import QtQuick 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.0
Dialog
{
id: root
title: "MyDialog"
standardButtons: Qt.NoButton
ColumnLayout
{
id: column
width: parent ? parent.width : 200
Label { text: "hello world"; Layout.fillWidth: true }
}
}
當我啓動我的應用程序時,屏幕變暗,並且Dialog
的陰影出現,好像對話框有width == 0
。
有時(很少)對話框顯示正確。
如果我將Component.onCompleted
行註釋掉並使用Button
啓動對話框,它會正確顯示。
我在做什麼錯? 我使用Qt 5.5爲Android
當我啓動的對話框'onCompleted'(查看更新的OP)纔會出現的問題。 Qt示例自己建議將'width'設置爲'parent.width',見 http://doc.qt.io/qt-5/qtquickdialogs-systemdialogs-customdialogs-qml.html – marmistrz
首先,你是對的 - 它是原創例子中有趣的一點。其次,這是一個QML - >海事組織,從來不能確定100%。這裏是從文檔引用(組件)[http://doc.qt.io/qt-5/qml-qtqml-component.html]: >相應的處理程序是'onCompleted'。它可以在任何對象上聲明。運行'onCompleted'處理程序的順序是** undefined **。 只是一個測試筆記 - 嘗試觸發'StackedView'深度''的'dialog.open()'更改。 – troyane
是的,情況就是這樣。我發佈了一個解決方案。使用'Stack.status'附加屬性比使用'depth'效率更高。如果你有更好的主意,請發佈。 – marmistrz