QML 消失的对象

QML disappearing objects

我对物品消失有疑问。如果只有 "loginBox" - 它看起来不错: 但是当我添加 "savedAccountsBox" 时,"loginBox" 消失了,只有 "savedAccountsBox": 结构似乎也不错:

怎么了? 这是我的代码:

ApplicationWindow {
    id: applicationWindow1
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    menuBar: MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Exit")
                onTriggered: Qt.quit();
            }
        }
    }


    GridLayout {
            anchors.fill: parent
            //anchors.margins: 20
            //rowSpacing: 20
            //columnSpacing: 20
            //flow:  width > height ? GridLayout.LeftToRight : GridLayout.TopToBottom

            TabView {
                Layout.fillWidth: true
                Layout.fillHeight: true
                Tab {
                    title: "Accounts"

                    GroupBox {
                        id: loginBox
                        x: parent.width * 0.05
                        y: parent.height * 0.05
                        width:  parent.width * 0.4
                        height: parent.height * 0.9
                        title: "Login"

                        TextArea {
                            id: textArea1
                            x: parent.width * 0.125
                            y: parent.height * 0.125
                            width:  parent.width * 0.15
                            height: parent.height * 0.07
                        }
                    }

                    GroupBox {
                        id: savedAccountsBox
                        x: parent.width * 0.6
                        y: parent.height * 0.05
                        width:  parent.width * 0.3
                        height: parent.height * 0.9
                        title: "Saved Accounts"

                        ListView {
                            id: listView1
                            x: parent.width * 0.1
                            y: 0
                            displayMarginBeginning: -50
                            //anchors.centerIn: parent
                            width:  parent.width * 0.5
                            height: parent.height * 0.7
                            spacing: 10
                            scale: 1.6
                            delegate: Item {
                                x: 5
                                width: 80
                                height: 40
                                Row {
                                    id: row1
                                    spacing: 10
                                    Rectangle {
                                        width: 40
                                        height: 40
                                        color: colorCode
                                    }

                                    Text {
                                        text: name
                                        font.bold: true
                                        anchors.verticalCenter: parent.verticalCenter
                                    }
                                }
                            }

                            model: ListModel {
                                ListElement {
                                    name: "Grey"
                                    colorCode: "grey"
                                }

                                ListElement {
                                    name: "Red"
                                    colorCode: "red"
                                }

                                ListElement {
                                    name: "Blue"
                                    colorCode: "blue"
                                }
                            }
                        }
                    }

                }




                Tab {
                    title: "Blue"
                }
                Tab {
                    title: "Green"
                }
            }
    }
}

我建议删除绝对定位和尺寸标注,改用布局。 http://doc.qt.io/qt-5/qtquicklayouts-index.html

这是您的代码工作示例

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: applicationWindow1
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    menuBar: MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("Exit")
                onTriggered: Qt.quit();
            }
        }
    }


    GridLayout {
        anchors.fill: parent

        TabView {
            Layout.fillWidth: true
            Layout.fillHeight: true
            Tab {
                title: "Accounts"

                RowLayout {

                    GroupBox {
                        id: loginBox
                        title: "Login"

                        TextArea {
                            id: textArea1
                        }
                    }

                    GroupBox {
                        id: savedAccountsBox
                        title: "Saved Accounts"
                        Layout.fillHeight: true

                        ListView {
                            id: listView1
                            anchors.fill: parent
                            spacing: 10
                            delegate: Item {
                                width: row1.width
                                height: row1.height
                                Row {
                                    id: row1
                                    spacing: 10
                                    Rectangle {
                                        width: 40
                                        height: 40
                                        color: colorCode
                                    }

                                    Text {
                                        text: name
                                        font.bold: true
                                        anchors.verticalCenter: parent.verticalCenter
                                    }
                                }
                            }

                            model: ListModel {
                                ListElement {
                                    name: "Grey"
                                    colorCode: "grey"
                                }

                                ListElement {
                                    name: "Red"
                                    colorCode: "red"
                                }

                                ListElement {
                                    name: "Blue"
                                    colorCode: "blue"
                                }
                            }
                        }
                    }
                }

            }




            Tab {
                title: "Blue"
            }
            Tab {
                title: "Green"
            }
        }
    }
}

如果在另一个对象的定义中声明了一个对象,但没有将其声明为特定 属性 的值,则它被分配给 default property 值。 Tab 的默认 属性 是 sourceComponent。在您的情况下,您将 loginBox 分配给默认值 属性,然后立即用 savedAccountsBox 覆盖它。要修复它,您应该将两个 GroupBox 合并为一个 Item.

Tab {
    title: "Accounts"
    Item {
       GroupBox {
           id: loginBox
       }
       GroupBox {
           id: savedAccountsBox
       }
    }
}

P.S。你应该更喜欢锚定和布局而不是绝对定位。