【问题标题】:TabView without contents in QML在 QML 中没有内容的 TabView
【发布时间】:2015-08-31 08:17:41
【问题描述】:

我想为用户提供一个标签栏来选择其中一个元素进行过滤。

ColumnLayout
{
    anchors.fill: parent
    TabView
    {
        Layout.fillWidth: true
        Tab { title: "all" }
        Tab { title: "even" }
        Tab { title: "odd" }
        Tab { title: "multiple of 3" }
        Tab { title: "prime" }
    }
    TableView
    {
        Layout.fillHeight: true
        Layout.fillWidth: true
        model: mymodel

        TableViewColumn
        {
            role: "name"
            title: "name"
        }
        TableViewColumn
        {
            role: "number"
            title: "number"
        }
    }
}

不幸的是,TabBar 和 TableView 之间显示了大约 100px 的空白空间。

我不想创建 4 个 TableView - 我宁愿改变模型。我知道QtQuick.Controls.Private 中有TabBar,但我宁愿避免使用私有组件,因为它们可以随时更改。

有什么方法可以只显示 TabBar 而无需访问私有组件,例如隐藏那个空白区域?

我宁愿不覆盖样式,因为在 Android 上它会给我带来糟糕的、非原生的外观

【问题讨论】:

    标签: qt tabs qml qt5 qtquick2


    【解决方案1】:

    据我所知,没有可靠的方法来实现这一点。

    不过,有一个依赖于平台/DPI 的 hack。您可以使用滑块来确定理想的高度:

    import QtQuick 2.3
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.2
    import QtQuick.Layouts 1.2
    
    Window {
        id: window
        visible: true
        width: 400
        height: 400
    
        ColumnLayout {
            anchors.fill: parent
            spacing: 0
    
            TabView {
                Layout.fillWidth: true
                Layout.preferredHeight: s.value
    
                Tab {
                    title: "all"
                }
                Tab {
                    title: "even"
                }
                Tab {
                    title: "odd"
                }
                Tab {
                    title: "multiple of 3"
                }
                Tab {
                    title: "prime"
                }
            }
            TableView {
                Layout.fillHeight: true
                Layout.fillWidth: true
                model: ListModel {
                    ListElement {
                        name: "A"
                        title: "1"
                    }
                    ListElement {
                        name: "B"
                        title: "2"
                    }
                    ListElement {
                        name: "C"
                        title: "3"
                    }
                }
    
                TableViewColumn {
                    role: "name"
                    title: "name"
                }
                TableViewColumn {
                    role: "number"
                    title: "number"
                }
            }
        }
    
        Slider {
            id: s
            minimumValue: 0
            maximumValue: 50
            anchors.bottom: parent.bottom
    
            Text {
                text: s.value.toFixed(0)
                anchors.left: parent.right
            }
        }
    }
    

    对我来说,在桌面上是 29 像素。

    【讨论】:

    • 但它不是便携的。在 Android 上,我必须支持具有各种 DPI 的多个屏幕
    • 不,不是。这很老套。
    • 嗯...是否可以使内容非常小,例如1px 高?
    • TabView的内容? contentItem 属性是只读的,所以没有。
    • 这就是你的答案。 :p
    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多