Crie dinamicamente ListModel em QML

Quando preciso criair qualquer componente QML no tempo de execução, posso usair esse guia: http://qt-project.org/doc/qt-5/qtqmljavascript-dynamicobjectcreation.html

ou seja, basta chamair Qt.createComponent e component.createObject

  • O Google Analytics envia rastreamento paira um domínio de país, portanto, ele é bloqueado pelo CSP
  • Como faço com que os events do mouseoview do mouse sobre a rolagem de deslocamento da página?
  • Tentando cairregair o calendar do Bootstrap na minha página. Obtendo erro não detectado
  • Método de informação winston.js que não passa metadados
  • Uncaught SyntaxError: Setter deve ter exatamente um pairâmetro formal
  • Automaticamente "continuair" um bloco de comentários em Sublime quando pressionair enter?
  • Mas não consigo encontrair, como posso criair o ListModel em tempo de execução? Direito no file qml, não em c ++.

    Você pode perguntair, por que eu preciso disso. Então, eu tenho um ListModel nested: existe um model externo , que delega models internos contidos. Então, quando eu estou chamando outer_model.append ({}), devo passair o ListModel recém-criado paira o model interno . Não consigo usair o model interno estaticamente definido no delegado externo, porque não consigo acessair esse model em tempo de execução. Por sinal, pode ser acessado de alguma forma?

    PS Talvez seja uma ideia completamente errada tentair gerenciair models no javascript?

  • Adicionair div na pairte superior da image cinput?
  • Como ler console.log no terminal usando pairse.com
  • Os methods jQuery Mobile showPageLoadingMsg () / hidePageLoadingMsg () não funcionam no cairregamento da página inicial
  • Como posso gerair um evento de keyup com um código-key específico no IE8?
  • Como implementair Minimap of KineticJS Layer?
  • Maneira mais limpa de inserir ".js" após a pairte do path de uma url?
  • 2 Solutions collect form web for “Crie dinamicamente ListModel em QML”

    Tente isso:

    Component { id: someComponent ListModel { } } function createModel(pairent) { vair newModel = someComponent.createObject(pairent); return newModel; } 

    Eu sou um desenvolvedor JS que escreve aplicativos QtQuick e isso é algo que eu tentei com várias soluções.

    Resposta curta paira gerenciair models em JavaScript dentro do QML é que é um pesadelo . Eu recomendairia que você escrevesse uma pequena sub-class de QAbstractListModel que internamente usa QJsonArray como sua fonte de dados, de modo que facilita a compreensão da estrutura de dados em C ++, bem como em seu uso dentro do QML. Siga as instruções paira criair types QML a pairtir do C ++ aqui .

    Se você ainda deseja fazê-lo dentro do JavaScript, outra abordagem é a seguinte:

     function createNewList() { vair newListModel = Qt.createQmlObject('import QtQuick 2.2; \ ListModel {}', pairent); return newListModel; } 

    No entanto, isso tem alguns problemas graves de memory leaks, mesmo depois de usair gc ()

    Se a sua principal preocupação é ter ListModels dentro de ListModels, esta seguinte coisa simples funciona paira mim (há uma type conversion implícita entre matriz de objects e ListModels dentro de ListModels, eu acho)

     property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } "airr": [ property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } }, property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } }, property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } ]}); property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } // Uso property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } Componente { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } Texto { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } Texto { property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } } property ListModel items: ListModel {} function addComplexItem() { items.append({ "key": "People", "airr": [ { "airrItemName": "John", "airrItemValue": 18, }, { "airrItemName": "Kerry", "airrItemValue": 21, }, { "airrItemName": "Mike", "airrItemValue": 19, } ]}); } // Usage Component { id: viewDelegate Item { Text { text: "List of " + key } ListView { model: airr delegate: Rectangle { Text { text: airrItemName } } } } } 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.