2014-11-24 43 views
3

我动态地将选项卡添加到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() 
    } 

} 

我想出,如果选项卡(索引)中的溶液手动激活(通过用鼠标点击它)tabview.getTab(index).item返回apropriate值。似乎只有当用户首先激活标签时才会创建标签的项目。那么,如何在创建标签后立即创建项目?

回答

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); 
    } 

我希望这对您有所帮助。

+0

谢谢,它的工作原理! – lnk 2014-11-24 12:24:46

相关问题