Что-то стало нехватать стандартного qml Grid, и решил попробовать написать свой компонент, похожий на Grid, только с блекджеком и шлюхами.

Поехали.

Для Qt4: Файл-> новый файл или проект->Особый модуль расширяющий QML

Для Qt5: Файл-> новый файл или проект->Библиотеки->Модуль, расширяющий Qt Quick 2

по вкусу:  далее, далее,

Имя класса объекта — как  будет называться компонент в qml.

URI —  желаемый путь  к  каталогу с расширением (где Qt будет искать компонент при импорте в других проектах)

Например, пусть будет:  ex.components.exgrid

Создастся базовый шаблон.

Минимальное расширение готово.

 

Теперь что бы Qt  мог увидеть наше расширение необходимо добавить плагин  в глобальную область видимости Qt,

Открываем файл *.pro  и в конец добавляем:

Для windows:

[cc lang=»c++»] win32 {
installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
qmldir.path = $$installPath
target.path = $$installPath
INSTALLS += target qmldir
}
[/cc]

Для Qt5: QT_INSTALL_QML

Для Qt4: QT_INSTALL_IMPORTS

Узнать значения переменных окружения Qt: C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin>qmake -query

Для линуксоидов: уже всё есть и ничего добавлять не нужно.

Потом на проекте жмём правой кнопкой мыши и выбираем пункт меню «Установить»

 

Альтернативный путь:  добавить вручную, для этого:

Создать папку плагина в

Для Qt4: C:/QtSDK/Desktop/Qt/4.8.1/mingw/imports

Для Qt5: С:/Qt/Qt5.0.1/5.0.1/mingw47_32/qml

(Естественно, всё зависит от того какую версию Qt используете и куда её поставили, в общем, разберетесь)

папки, на основе URI, например   ex подпапку components и в ней exgrid

В неё складываем нашу dll ку, а так же файл qmldir. В нём описание нашего плагина, и без этого Qt плагин не увидит.

 

Ну и пример использования:

Создаёте новый QtQuick проект,

qml файл:

[cc lang=»c++»] import QtQuick 1.1
import ex.components.exgrid 1.0 //— URI нашего расширения + версия (версию можно менять в exgrid_plugin.cpp)
Rectangle {
width: 360
height: 360
Text {
text: qsTr(«Hello World»)
anchors.centerIn: parent
}
MyItem {
id: myItem
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
[/cc]

На этом для начала всё,  продолжение уже почти готово.