2014-12-13 7 views
9

W Qt 5.4 szablon podczas tworzenia nowego "pliku QtQuick UI" generuje dwa pliki: MyScreen.qml i MyScreen.ui.qml.Praca z plikami .ui.qml

Plik wydaje się być przeznaczony tylko dla interfejsu użytkownika, ponieważ Qt Creator sugeruje, że należy go edytować tylko w trybie projektowania. To sugeruje, że powinienem tworzyć obiekty interfejsu użytkownika (etykiety, przyciski itp.) Tam i w jakiś sposób odnosić się do nich w pliku MyScreen.qml, w którym znajduje się logika. Zasadniczo brzmi to świetnie, ale Qt niestety nie ma przykładów, jak pracować z tymi 2 plikami.

Oto zawartość tych plików:

MyScreen.qml:

import QtQuick 2.4 

MyScreen { 
} 

MyScreen.ui.qml (I dodaje etykietę tekstową w trybie projektowania):

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

próbowałem uruchamianiu tego MyScreen dla użyj w StackView (patrz poniżej), ale (co nie jest zaskoczeniem) nie widzę etykiety.

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

Wszelkie wskazówki dla początkujących QML?

+1

Jakikolwiek komunikat o błędzie pojawia się podczas pracy? Chyba problem polega na tym, że masz dwa komponenty o tej samej nazwie: 'MyScreen'. Zarówno MyScreen.qml, jak i MyScreen.ui.qml tworzą obiekt MyScreen i powodują konflikt. Podczas tworzenia pliku QtQuick UI spróbuj nazwać "Nazwa komponentu" i "Nazwa formularza komponentu" inaczej. – mcchu

+0

duh :) Dzięki mcchu, jeśli umieścisz to w odpowiedzi, dam ci kilka punktów! – Tim

Odpowiedz

3

Podczas tworzenia pliku QtQuick UI w QtCreator, należy w inny sposób nadać nazwę "Nazwa komponentu" i "Nazwa formularza komponentu".

MyScreen.qml tworzy komponent MyScreen, jednak w realizacji:

MyScreen { /* ... */} 

MyScreen tworzy się rekurencyjnie.

W tym przypadku MyScreen.ui.qml tworzy komponent MyScreen w projekcie. W tym samym czasie kod w MyScreen.qml, który został wygenerowany automatycznie przez QtCreator, wykorzystuje komponent MyScreen stworzony przez MyScreen.ui.qml. Niestety, MyScreen jest również nazwą MyScreen.qml i sprawia, że ​​tworzy się rekursywnie w środowisku wykonawczym.

Użyj różnych nazw, aby rozwiązać problem. Na przykład zmień nazwę MyScreen.ui.qml na MyScreenForm.ui.qml.