如何以编程方式创建选项卡项?

时间:2014-11-24 10:49:10

标签: qt qml

我动态地将标签添加到TabView并将标签的项目传递给c ++以进行进一步处理。问题是方法tabview.getTab(tabview.getTab(tabview.count-1).item)返回null,哪个索引是> 0。这是代码:

//main.qml
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    signal tabAdded(variant c)
    ColumnLayout{
        anchors.fill: parent
        TabView{
            visible: true
            id:tabview
            Layout.fillHeight: true
            Layout.fillWidth: true
        }
        Button{
            text: "add tab"
            onClicked:{
                var c = Qt.createComponent("Tab.qml");
                tabview.addTab("tab", c)
                // tabAdded(tabview.getTab(tabview.count-1).item)
                console.log(tabview.getTab(tabview.count-1).item)
        }
     }
  }

}

//Tab.qml
import QtQuick 2.0
import QtQuick.Controls 1.1

Item{
    signal tabButtonClicked()
    anchors.fill: parent
    Button{
       text: "tabButton"
       anchors.centerIn: parent
       onClicked: tabButtonClicked()
    }

}

我发现如果手动激活tab(索引)(通过在其上单击鼠标),tabview.getTab(index).item将返回适当的值。似乎只有在用户首次激活选项卡时才会创建选项卡项。那么,如何在创建标签后立即创建项目?

1 个答案:

答案 0 :(得分:5)

TableView 中的每个标签都由继承自Loader component标签组件表示。如果要强制Tab加载其内容,只需将active property设置为true即可。此属性控制何时必须加载组件。现在,您的按钮代码如下所示:

Button{
    text: "add tab"
    onClicked:{
        var c = Qt.createComponent("Tab.qml");
        tabview.addTab("tab", c);
        var last = tabview.count-1;
        tabview.getTab(last).active = true; // Now the content will be loaded
        console.log(tabview.getTab(last).item);
    }

我希望这对你有所帮助。