2014-11-24 2 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 представлен Tab компонента, который наследует от 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

Смежные вопросы