3

我有一个TabView,它有 3 个Tab,说tab1, tab2, tab3。每个Tab都有一些小部件。我想要某种信号机制,这样当我进入 时tab3,我想设置其中一些小部件(例如 a TextField)的状态tab3,当我离开它时,我想重置它们的状态。

关于如何实现这一目标的任何指示?当我阅读关于TabViewand的 Qt 5.3 文档时Tab,我没有发现它们暴露的任何信号。

信令可以在 and 之内或tab3之间。我对其中任何一个都很好。Tabviewtab3

4

2 回答 2

6

使用onVisibleChanged试试这个:

TabView {

    Tab {
        onVisibleChanged: console.log("hello1 "+visible)
        title: "Red"
        Rectangle { color: "red" }
    }
    Tab {
        onVisibleChanged: console.log("hello2 "+visible)
        title: "Blue"
        Rectangle { color: "blue" }
    }
    Tab {
        onVisibleChanged: console.log("hello3 "+visible)
        title: "Green"
        Rectangle { color: "green" }
    }
}
于 2014-12-10T11:11:10.620 回答
0

在选项卡更改时,两个选项卡的可见性会更改,即离开选项卡(从falsetrue)和进入选项卡(从truefalse)。这些事件并不总是序列化的。我不得不补充:

onVisibleChanged: {
    if (!this.activeFocus){
        // ...
    }
}

但是,如果您实际上没有单击选项卡,而是通过将选项卡设置active为 来激活它true,则上述解决方案是不够的。您必须使用TabView.currentIndex它与静态(即声明性选项卡索引)进行比较。如果onVisibleChanged为新的活动选项卡调用,则索引应该相等。

以下是示例:

function refreshButtons(tabIndexStatic){
    if (tabStepsView.currentIndex !== tabIndexStatic)
        return;
    buttonPrev.visible      = tabIndexStatic !== 0
    buttonNext.visible      = tabIndexStatic !== tabStepsView.count - 1
    buttonConvert.visible   = tabIndexStatic === tabStepsView.count - 1
    }
    Tab {
        title: qsTr("Tab 0")
        onVisibleChanged: parent.refreshButtons(0)

        // ...
    }
    Tab {
        title: qsTr("Tab 1")
        onVisibleChanged: parent.refreshButtons(1);
        // ...
    }
    Tab {
        title: "Tab 2"
        onVisibleChanged: tabStepsView.refreshButtons(2)
        // ...
    }
}
于 2015-09-24T20:31:52.023 回答