2014-12-13 22 views
9

Qt 5.4'te, yeni bir "QtQuick UI Dosyası" oluştururken şablon iki dosya oluşturur: MyScreen.qml ve MyScreen.ui.qml..ui.qml dosyalarıyla çalışma

MyScreen.ui.qml dosyası yalnızca UI için görünüyor, çünkü Qt Creator yalnızca onu tasarım modunda düzenlemenizi önerir. Bu, UI nesnelerini (etiketler, düğmeler, vb.) Oluşturmam gerektiğini ve bir şekilde mantığın gideceği MyScreen.qml dosyasında bunlara atıfta bulunmam gerektiğini ima eder. Prensipte bu kulağa harika geliyor ama ne yazık ki Qt, bu 2 dosya ile nasıl çalışılacağına dair herhangi bir örnek ile gelmiyor.

MyScreen.qml: Burada

bu dosyaların içeriğini olan

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

Ben MyScreen için başlatmasını çalıştı: (ı tasarım modunda metin etiketi eklenen)

import QtQuick 2.4 

MyScreen { 
} 

MyScreen.ui.qml

StackView'da (aşağıya bakınız) kullanın, ancak (şaşırtıcı bir şekilde) etiketi göremiyorum.

main.qml: Bir QML newbie için

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

Herhangi işaretçiler?

+1

Çalışırken herhangi bir hata mesajı görünüyor mu? Sorun şu ki, aynı ada sahip iki bileşene sahip olmanız: 'MyScreen'. Hem MyScreen.qml hem de MyScreen.ui.qml, 'MyScreen' nesnesini oluşturur ve çakışır. QtQuick UI Dosyası oluştururken, "Bileşen adı" ve "Bileşen formu adı" adlarını farklı şekilde deneyin. – mcchu

+0

duh :) Teşekkürler mcchu, eğer bir cevaba koyarsanız size bazı puanlar vereceğim! – Tim

cevap

3

QtQuick UI Dosyası QtCreator'da oluştururken, "Bileşen adı" ve "Bileşen formu adı" adlarını farklı şekilde belirtmelisiniz.

MyScreen.qml Ancak uygulamada, bir MyScreen bileşeni oluşturur:

MyScreen { /* ... */} 

MyScreen yinelemeli kendisini oluşturur.

Bu durumda, MyScreen.ui.qml projesinde bir MyScreen bileşeni oluşturur. Aynı zamanda, QtCreator tarafından otomatik olarak oluşturulan MyScreen.qml'deki kod, MyScreen.ui.qml tarafından oluşturulan MyScreen bileşenini kullanır. Ne yazık ki, MyScreen aynı zamanda MyScreen.qml'nin adıdır ve çalışma zamanında kendi kendini tekrar tekrar oluşturmasını sağlar.

Farklı adlar kullanın sorunu çözebilir. Örneğin, MyScreen.ui.qml dosyasını MyScreenForm.ui.qml olarak yeniden adlandırın.

İlgili konular