Russian Qt Forum
Ноябрь 01, 2024, 09:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с передачей типа из С++ в QML  (Прочитано 3542 раз)
spirits25
Гость
« : Октябрь 10, 2012, 12:49 »

Всем доброго времени.
Пользуюсь библиотеками 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
Программа неожиданно завершилась.

Вот и вопрос, почему?=)
« Последнее редактирование: Октябрь 10, 2012, 12:52 от spirits25 » Записан
spirits25
Гость
« Ответ #1 : Октябрь 10, 2012, 13:32 »

кроме того в стандартном примере "qt5/qtquick1/examples/declarative/cppextensions/referenceexamples/valuesource"
выполняю
Цитировать
qt5/qtbase/bin/qmake
make
qmlviewer example.qml
на что получаю
Цитировать
Qml debugging is enabled. Only use this in a safe environment!
file:///mnt/d/qt5/qtquick1/examples/declarative/cppextensions/referenceexamples/valuesource/example.qml:41:1: module "People" is not installed
     import People 1.0
     ^

может дело в текущей версии библиотек qt5? нужно просто подождать? или у меня ошибка?
Записан
yoyo
Гость
« Ответ #2 : Ноябрь 08, 2012, 15:00 »

По поводу второго, могу сказать, что при запуске qml файла через qmlviewer найти класс People система не сможет, т.к. он нигде не зарегистрирован. Он регистрируется в main.cpp через qmlRegisterType<Person>. Для работы примера необходимо запускать исполняемый файл, созданный через qmake && make.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.058 секунд. Запросов: 21.