crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

pharret31
  опции профиля:
сообщение 30.8.2013, 8:50
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 20.4.2013
Пользователь №: 3802

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте, ув. форумчане!

Мне нужно сделать dll-plugin'ы для win-приложения.
В Ubuntu при сборке plugin'а у меня получался *.so файл, который я клал в папочку plugins рядом с программой и всё работало, но когда мне нужно было собрать приложение в windows, я был немного удивлён. Собрал я qt статически, собрал plugin, и на выходе получил *.a файл, который при этом ещё и не подключался к программе (она его не видит). Как можно сделать расширение для программы с помощью qt plugin в windows?

Прилагаю код одного из plugin'ов:
Раскрывающийся текст

*.pro файл:
TEMPLATE = lib

CONFIG   += plugin

QT       -= gui
QT       += sql

TARGET = operation

DESTDIR = ../../plugins

OTHER_FILES += \
    operation.json

HEADERS += \
    operation.h \
    ../../hospitalGUI/libraryinterface.h

SOURCES += \
    operation.cpp


*.h файл:
#ifndef OPERATION_H
#define OPERATION_H

#include <QObject>
#include <qplugin.h>

#include <QFile>
#include <QDir>
#include <QTextStream>
#include <QSqlQuery>

#include "../../hospitalGUI/libraryinterface.h"

class Operation : public QObject, public LibraryInterface
{
    Q_OBJECT

    Q_PLUGIN_METADATA(IID "ru.pharret31.Operation" FILE "operation.json")
    Q_INTERFACES(LibraryInterface)
public:
    QString whatIsIt() const;
    void printForm(const int id);
    
};

#endif // OPERATION_H



и код функций, с помощью которых он подключается к программе:
Раскрывающийся текст

void PrintForm::loadPlugins()
{
    QDir *dir = new QDir(QApplication::applicationDirPath());
    dir->cd("plugins");

    foreach (QString fileName, dir->entryList(QDir::Files))
    {
        QPluginLoader loader(dir->absoluteFilePath(fileName));
        addToList(qobject_cast<QObject *>(loader.instance()));
    }
}

void PrintForm::addToList(QObject *pObj)
{
    if (!pObj)
    {
        return;
    }

    LibraryInterface *libI = qobject_cast<LibraryInterface *>(pObj);

    if (libI)
    {
        QAction *pAct = new QAction(libI->whatIsIt(), pObj);
        connect(pAct, SIGNAL(triggered()), this, SLOT(onActionTriggered()));

        QListWidgetItem *lwi = new QListWidgetItem();
        lwi->setText(libI->whatIsIt());
        lwi->setCheckState(Qt::Checked);
        m_makeupList->addItem(lwi);

        actions << pAct;
    }
}



Замечу, что в ubuntu всё работает. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 1:42