Russian Qt Forum
Июня 20, 2025, 22:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 5.2.1 не могу создать плагин  (Прочитано 7465 раз)
Silver_swift
Гость
« : Марта 03, 2014, 22:52 »

Доброго времени суток!

Столкнулся с неожиданной проблемой при попытке создать плагин.

Сперва попробовал сделать это по образу и подобию Qt4. Создал два класса ProvederPlugin - сам плагин и ProviderItem - пустой класс унаследованный от QObject.

Код:
provideritem.h
Код:
#ifndef PROVIDERPLUGIN_H
#define PROVIDERPLUGIN_H


#include <QObject>
#include <QtQuick>
#include <QQmlExtensionPlugin>

class ProvederPlugin : public QQmlExtensionPlugin
{
    Q_OBJECT
//    Q_PLUGIN_METADATA("ProviderItem" )
public:
    void registerTypes(const char *uri);

};

#endif // PROVIDERPLUGIN_H

Код:
#include "providerplugin.h"
#include "provideritem.h"

void ProvederPlugin::registerTypes(const char *uri){
    qmlRegisterType<ProviderItem>(uri, 1, 0, "ProviderItem");
}


.pro
Код:
TEMPLATE = lib
CONFIG += qt plugin
QT += qml quick

DESTDIR = ../qml
TARGET = provider_plugin

HEADERS += \
    provideritem.h \
    providerplugin.h

SOURCES += \
    provideritem.cpp \
    providerplugin.cpp


В каталоге qml создан qmldir:
Код:
module MyModule
MainView 1.0 mainview.qml
plugin provider_plugin .

При запуске вижу:
Код:
file:///home/<путь к файлу>/qml/qmldir: plugin cannot be loaded for module "qml": Plugin verification data mismatch in '/home/<путь к файлу>/qml/libprovider_plugin.so' 

Если раскомментировать  Q_PLUGIN_METADATA - мок выкинет ошибку. Что это за макрос мне не ясно, также как и что такое IID плагина. Ощущение такое будто я что-то пропустил и не могу найти нужную информацию.

Потом я попробовал запустить пример QML Plugin Example на который есть ссылка в справке. Собрал. При запуске увидел:
Код:
qmlscene -I imports plugins.qml
file:///home/<путь к файлу>/qml/qmlextensionplugins/plugins.qml:41 plugin cannot be loaded for module "TimeExample": The plugin '/home/<путь к файлу>/qml/qmlextensionplugins/imports/TimeExample/libqmlqtimeexampleplugin.so' uses incompatible Qt library. (5.2.1) [release]
и
Код:
qmlscene -I imports plugins.qml
file:///home/<путь к файлу>/qml/qmlextensionplugins/plugins.qml:41 plugin cannot be loaded for module "TimeExample": The plugin '/home/<путь к файлу>/qml/qmlextensionplugins/imports/TimeExample/libqmlqtimeexampleplugin.so' uses incompatible Qt library. (5.2.1) [debug]
в зависимости от параметра сборки.

В общем, коллеги, помогите разобраться, как создать свой плагин.
Записан
Silver_swift
Гость
« Ответ #1 : Марта 03, 2014, 23:10 »

Некоторый прогресс. Прочитал https://bugreports.qt-project.org/browse/QTCREATORBUG-8500 и добавил
Код:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin")
.
Новая проблема при запуске:
Код:
file:///home/<путь к файлу>qml/qmldir: plugin cannot be loaded for module "qml": Module namespace 'VisualModule' does not match import URI 'qml
Записан
Silver_swift
Гость
« Ответ #2 : Марта 03, 2014, 23:14 »

Мде... наугад заменил в qmldir VisualModule на qml. Плагин вроде бы загрузился. Где бы найти tutorial по созданию плагина с объяснением всех моментов?

Добавлено:
Поспешил радоваться. При использовании в qml:
Код:
 ProviderItem is not a type ProviderItem is not a type 
         ProviderItem{
         ^


Хотя QtCreator все вроде бы распознает и даже автодополнение знает о таком компоненте.
« Последнее редактирование: Марта 03, 2014, 23:18 от Silver_swift » Записан
Silver_swift
Гость
« Ответ #3 : Марта 19, 2014, 21:00 »

Э-хей... Проблему давно решил встраиванием QObject'a как свойства. Но вопрос с подгрузкой плагина в QML остался не решен. Неужели никто не пробовал делать такого в Qt5?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #4 : Марта 19, 2014, 21:44 »

Посмотри, пример рабочий.

http://pavelk.ru/pishem-rasshirenie-plugin-dlya-qml-qml-grid
Записан
Silver_swift
Гость
« Ответ #5 : Марта 19, 2014, 21:49 »

А если я не хочу устанавливать плагин в каталог с Qt? Например, если надо все файлы программы собрать в одном каталоге.
В Qt4 плагин подцеплялся из любого каталога, указанного в qmldir.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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