我动态地将标签添加到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
将返回适当的值。似乎只有在用户首次激活选项卡时才会创建选项卡项。那么,如何在创建标签后立即创建项目?
答案 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);
}
我希望这对你有所帮助。