2014-12-13 11 views
9

In Qt 5.4, il modello durante la creazione di un nuovo "QtQuick UI File" genera due file: MyScreen.qml e MyScreen.ui.qml.Utilizzo di file .ui.qml

Il file MyScreen.ui.qml sembra essere solo per l'interfaccia utente, poiché Qt Creator suggerisce di modificarlo solo in modalità progettazione. Ciò implica che dovrei creare oggetti UI (etichette, pulsanti, ecc.) Lì e in qualche modo riferirmi a loro nel file MyScreen.qml in cui la logica andrebbe. In linea di principio questo sembra grandioso, ma sfortunatamente Qt non viene fornito con esempi su come lavorare con questi 2 file.

Ecco il contenuto di quei file:

MyScreen.qml:

import QtQuick 2.4 

MyScreen { 
} 

MyScreen.ui.qml (ho aggiunto l'etichetta di testo in modalità di progettazione):

import QtQuick 2.4 

Item { 
    width: 400 
    height: 400 

    Text { 
     id: text1 
     x: 144 
     y: 151 
     width: 103 
     height: 31 
     text: qsTr("Text") 
     font.pixelSize: 12 
    } 
} 

ho provato un'istanza di un MyScreen per utilizzare in un StackView (vedi sotto), ma (non sorprendentemente) non vedo l'etichetta.

main.qml:

import QtQuick 2.4 
import QtQuick.Controls 1.3 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    StackView { 
     id: stack 
     anchors.fill: parent 
     initialItem: myscreen 
    } 

    MyScreen { 
     id: myscreen 
     anchors.fill: parent 
    } 
} 

Tutti gli indicatori per un newbie QML?

+1

Viene visualizzato un messaggio di errore durante l'esecuzione? Immagino che il problema sia che hai due componenti con lo stesso nome: 'MyScreen'. Sia MyScreen.qml che MyScreen.ui.qml creano l'oggetto 'MyScreen' e creano conflitti. Durante la creazione del file dell'interfaccia utente QtQuick, provare a denominare "Nome componente" e "Nome modulo componente" in modo diverso. – mcchu

+0

duh :) Grazie mcchu, se lo metti in una risposta ti darò alcuni punti! – Tim

risposta

3

Durante la creazione di QtQuick UI File in QtCreator, è necessario denominare "Nome componente" e "Nome modulo componente" in modo diverso.

MyScreen.qml crea un componente MyScreen, tuttavia nella realizzazione:

MyScreen { /* ... */} 

MyScreen si crea in modo ricorsivo.

In questo caso, MyScreen.ui.qml crea un componente MyScreen nel progetto. Allo stesso tempo, il codice in MyScreen.qml, generato automaticamente da QtCreator, utilizza il componente MyScreen creato da MyScreen.ui.qml. Sfortunatamente, MyScreen è anche il nome di MyScreen.qml e lo crea in modo ricorsivo in fase di runtime.

Utilizzare nomi diversi può risolvere il problema. Ad esempio, rinominare MyScreen.ui.qml in MyScreenForm.ui.qml.