Всем доброго времени.
Пользуюсь библиотеками Qt5.
Создаю класс, наследованный от QDeclarativeItem. Получаю 2 файла navigatebutton.h и navigatebutton.cpp.
navigatebutton.h:
#ifndef NAVIGATEBUTTON_H
#define NAVIGATEBUTTON_H
#include <QtQuick1/QDeclarativeItem>
class NavigateButton : public QDeclarativeItem
{
Q_OBJECT
public:
explicit NavigateButton(QDeclarativeItem *parent = 0);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
private slots:
void update();
};
#endif // NAVIGATEBUTTON_H
и navigatebutton.cpp
#include "navigatebutton.h"
#include <QPainter>
NavigateButton::NavigateButton(QDeclarativeItem *parent) :
QDeclarativeItem(parent)
{
setFlag(QGraphicsItem::ItemHasNoContents, false);
}
void NavigateButton::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QBrush brush("green");
painter->setBrush(brush);
painter->drawPie(boundingRect(), 16 * 90, -144 * 25);
}
void NavigateButton::update()
{
QDeclarativeItem::update();
}
В main.cpp подключаю qml и регистрирую предыдущий класс
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include "navigatebutton.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<NavigateButton>("org.test", 1, 0, "NavigateButton");
QtQuick2ApplicationViewer viewer;
viewer.setSource(QUrl("qrc:/qml/planet_3d/main.qml"));
viewer.show();
return app.exec();
}
в итоге внутри qml файла автодополнение видит тип NavigateButton, но при попытке запуска выдаёт
Module 'Qt3D' does not contain a module identifier directive - it cannot be protected from external registrations.
qrc:/qml/new_project/main.qml:3:1: module "org.test" is not installed
Программа неожиданно завершилась.
Вот и вопрос, почему?=)