Russian Qt Forum

Qt => Qt Quick => Тема начата: Kunashir от Ноябрь 24, 2011, 22:20



Название: [решено]Использование своих компонентов
Отправлено: Kunashir от Ноябрь 24, 2011, 22:20
Добрый вечер.
Создаю в креатор приложение QML, добавляю новый файл, в котором хочу описать некий объект.
Так вот ни как не получается сделать, так чтобы объект из второго файла, можно было увидеть в основном.
И как сделать чтобы объекты в креаторе отображались в "библиотеки", если переключаться в режим дизайнера.

Спасибо.


Название: Re: Использование своих компонентов
Отправлено: Kunashir от Ноябрь 25, 2011, 08:57
В http://developer.qt.nokia.com/wiki/GettingStartedQMLRussian#3f6f8cc9beaffd1d806d115a1816fcee (http://developer.qt.nokia.com/wiki/GettingStartedQMLRussian#3f6f8cc9beaffd1d806d115a1816fcee)
написано:   
import Qt 4.7                      //импортируем модуль Qt QML
import "folderName"                //импортируем содержимое папки
import "script.js" as Script       //импортируем код из файла Javascript, назовем этот код именем Script

Представленный выше код показывает, как можно использовать ключевое слово import. Это необходимо для того, чтобы использовать файлы JavaScript или QML, которые расположены в другом каталоге. Так как файл Button.qml находится в той же папке, что и файл FileMenu.qml, то у нас нет необходимости импортировать файл Button.qml для работы с ним.

У меня два файла в одной папке, вот код:
main.qml
Код:
import QtQuick 1.0


Rectangle {
    width: 360
    height: 360
    Text {
        text: "Hello World"
        anchors.centerIn: parent
    }
    MouseArea {
        x: 0
        y: 0
        width: 360
        height: 360
        anchors.leftMargin: 0
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
 

}


и
button.qml

Код:
import QtQuick 1.0
//import Qt 4.7


Item {
    id: button
    signal clicked
    property string text
    property bool toggled: false
    width: 100
    height: 60
    Rectangle {
        anchors.fill: button
        anchors.margins: mouseArea.pressed ? 3 : 2
        color: toggled ? (mouseArea.pressed ? "#442222" : "darkred") : (mouseArea.pressed ? "#333333": "black")
        radius: mouseArea.pressed ? 8 : 6
        Text {
            id: text
            anchors.centerIn: parent
            text: button.text
            font.pixelSize: mouseArea.pressed ? 12 : 14
            color: "white"
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
        }
        MouseArea {
            id: mouseArea
            anchors.fill: parent
            onClicked: {
                button.clicked()
            }
        }
    }
}

По идее для обращение к объекту из button.qml в main.qml надо написать - button {}, но на это креатор ругается.


Название: Re: Использование своих компонентов
Отправлено: Kunashir от Ноябрь 25, 2011, 10:40
Решение: имя для файлов, которые будут использоваться как компоненты, надо начинать с большой буквы!
Спасибо, Пантерy.


Название: Re: [решено]Использование своих компонентов
Отправлено: twp от Ноябрь 25, 2011, 15:10
Вообще то это JavaScript и перед тем как начинать использовать QML троли рекомендуют изучить или хотя бы ознакомится с JavaScript.


Название: Re: [решено]Использование своих компонентов
Отправлено: Kunashir от Ноябрь 25, 2011, 21:04
Twp, не пойму при чем здесь JavaScript и то что имя файла должно быть с большой буквы! У меня то не было ошибки в синтаксисе. Или я что-то не понимаю?


Название: Re: [решено]Использование своих компонентов
Отправлено: twp от Ноябрь 26, 2011, 00:03
тут обратная зависимость. Поскольку имена типов объектов в JavaScript всегда должны начинаться с большой буквы (а переменные только с маленькой), то и имена файлов, которые используется в качестве типов объектов, соответвенно должны иметь такое же имя + раширение (.qml)


Название: Re: [решено]Использование своих компонентов
Отправлено: Kunashir от Ноябрь 26, 2011, 11:52
тут обратная зависимость. Поскольку имена типов объектов в JavaScript всегда должны начинаться с большой буквы (а переменные только с маленькой), то и имена файлов, которые используется в качестве типов объектов, соответвенно должны иметь такое же имя + раширение (.qml)

Понял, спасибо за разъяснение.