基于ctk框架的插件的基本格式

test_i.h

#include <QObject>

 
class MyTest : public QObject
{
    Q_OBJECT
public:
    virtual void test() = 0;
 
};
 
Q_DECLARE_INTERFACE(MyTest, "mytest")

 

test.h

#include "test_i.h"

class MTest : public MyTest
{
    Q_OBJECT
    Q_INTERFACES(MyTest)
public:    
    MTest();
    ~MTest();
    virtual void test();
};

 

test.cpp

#include "test.h"

//!
#include <QString>
#include <QDebug>
#include <QWidget>
#include <QLabel>
#include <QtUiTools/QUiLoader>
#include <QApplication>
#include <QFile>
#include <QLabel>
 
MTest::MTest()
{
 
}
 
MTest::~MTest()
{	
}
 
void MTest::test()
{
    QUiLoader uiLoader;
    QFile file(QString("%1/uis/test.ui").arg(qApp->applicationDirPath()));
    QWidget *widget = 0;
    if(file.open(QIODevice::ReadOnly))
    {
        widget = uiLoader.load(&file);
        file.close();
        if(widget)
        {
            QLabel *label = qFindChild<QLabel *>(widget, "lblShow");
            label->setText("Hello world!");
            widget->show();
        }
    }
}

 

test_plugin.h

#include "ctkPluginActivator.h"

 
class MTest;
 
class MTestPlugin : public QObject, public ctkPluginActivator
{
    Q_OBJECT
    Q_INTERFACES(ctkPluginActivator)
 
public:
    void start(ctkPluginContext *Context);
    void stop(ctkPluginContext *Context);
 
private:
    MTest *test;
};
 
test_plugin.cpp
#include "test_plugin.h"
#include <QtPlugin>
#include "test.h"
void MTestPlugin::start(ctkPluginContext *Context)
{
    test = new MTest();
    Context->registerService(QStringList("MyTest"), test);
}
void MTestPlugin::stop(ctkPluginContext *Context)
{
    Q_UNUSED(Context)
    if (test)
    {
        delete test;
        test = 0;
    }
}
Q_EXPORT_PLUGIN2(test, MTestPlugin)
 
 
MANIFEST.MF
Plugin-SymbolicName: test
Plugin-Version: 0.9.0
 
test.qrc
<RCC>
    <qresource prefix="test/META-INF">
        <file>MANIFEST.MF</file>
    </qresource>
</RCC>
 
test.pro
TEMPLATE = lib
QT         += gui
CONFIG     += plugin uitools
include(../../my_base.pri)
TARGET      = test
DESTDIR     = $$PWD/../../bin/plugins
HEADERS += *.h
SOURCES += *.cpp
RESOURCES += \
    test.qrc
 
关键点:
MANIFEST.MF中的Plugin-SymbolicName要与pro文件中的TARGET中以及qrc文件中qresource标签的prefix属性前半部分要一致,比如本文中都为test。
 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值