• 7832阅读
  • 3回复

QT应用程序怎么使用  plugin [复制链接]

上一主题 下一主题
离线ketiy2004
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-18
首先:新建了一个工程,用于产生 plugin 的静态库;
plugin 的.pro

QT += core \
    gui
TARGET = ekeyboard
TEMPLATE = lib
CONFIG += plugin\
          static
DESTDIR = $$[QT_INSTALL_PLUGINS]/styles

SOURCES += keypaddriverplugin.cpp \
    keypadhandler.cpp
HEADERS += keypaddriverplugin.h \
    keypadhandler.h

在DESTDIR 路径底下可以看到 生成的 libekeyboard.a 文件

应用程序的 .pro 如下:
TARGET = windget
TEMPLATE = app

QTPLUGIN +=ekeyboard
LIBS +=-L/opt/qtsdk-2010.01/qt/plugins/styles


SOURCES += main.cpp \
    widget.cpp \
HEADERS += widget.h \
FORMS += widget.ui


main.cpp 如下

#include <QtGui/QApplication>
#include "widget.h"
#include <QtPlugin>


Q_IMPORT_PLUGIN(ekeyboard)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    widget *w = new widget();
    w->show();
    return a.exec();
}


生成插件的工程,跟应用程序的工程在不同的路径下,编译的时候,会出现:
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypaddriverplugin.o): In function `~KeypadDriverPlugin':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:14: undefined reference to `QKbdDriverPlugin::~QKbdDriverPlugin()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypaddriverplugin.o): In function `KeypadDriverPlugin':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:7: undefined reference to `QKbdDriverPlugin::QKbdDriverPlugin(QObject*)'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypaddriverplugin.cpp:7: undefined reference to `QKbdDriverPlugin::QKbdDriverPlugin(QObject*)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o): In function `~keypadHandler':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o):/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:55: more undefined references to `QWSKeyboardHandler::~QWSKeyboardHandler()' follow
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(keypadhandler.o): In function `keypadHandler':
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:29: undefined reference to `QWSKeyboardHandler::QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:49: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:29: undefined reference to `QWSKeyboardHandler::QWSKeyboardHandler()'
/home/tommy/omap/proc/ekeyboard/ekeyboard/keypadhandler.cpp:49: undefined reference to `QWSKeyboardHandler::~QWSKeyboardHandler()'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o): In function `KeypadDriverPlugin::qt_metacall(QMetaObject::Call, int, void**)':
/home/tommy/omap/proc/ekeyboard/ekeyboard/moc_keypaddriverplugin.cpp:64: undefined reference to `QKbdDriverPlugin::qt_metacall(QMetaObject::Call, int, void**)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o): In function `KeypadDriverPlugin::qt_metacast(char const*)':
/home/tommy/omap/proc/ekeyboard/ekeyboard/moc_keypaddriverplugin.cpp:59: undefined reference to `QKbdDriverPlugin::qt_metacast(char const*)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o):(.data.rel.ro+0x0): undefined reference to `QKbdDriverPlugin::staticMetaObject'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypaddriverplugin.o):(.data.rel.ro._ZTI18KeypadDriverPlugin[typeinfo for KeypadDriverPlugin]+0x8): undefined reference to `typeinfo for QKbdDriverPlugin'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypadhandler.o):(.data.rel.ro._ZTV13keypadHandler[vtable for keypadHandler]+0x48): undefined reference to `QWSKeyboardHandler::processKeyEvent(int, int, QFlags<Qt::KeyboardModifier>, bool, bool)'
/opt/qtsdk-2010.01/qt/plugins/styles/libekeyboard.a(moc_keypadhandler.o):(.data.rel.ro._ZTI13keypadHandler[typeinfo for keypadHandler]+0x18): undefined reference to `typeinfo for QWSKeyboardHandler'
collect2: ld 返回 1
make: *** [windget] 错误 1
Exited with code 2.
Error while building project windget
When executing build step 'Make'


其中  KeypadDriverPlugin 是插件的类


以上错误: 请高手帮忙下
离线ketiy2004

只看该作者 1楼 发表于: 2010-05-20
自己顶下

原来
The QKbdDriverPlugin class is an abstract base class for keyboard driver plugins in Qt for Embedded Linux.
Note that this class is only available in Qt for Embedded Linux.
我用qt creator 编译,用的库应该是X11的,感觉是链接器找不到相应的库文件
离线paranoid
只看该作者 2楼 发表于: 2010-05-20
是不是因为qt本身没有静态编译?
离线lch922

只看该作者 3楼 发表于: 2011-08-24
QWSKeyboardHandler这个是用在嵌入式设备上的,pc的没有这个类吧。
给我一片天空,还你一道彩虹。
快速回复
限100 字节
 
上一个 下一个