Qt插件
来源:互联网 发布:photoshop做淘宝主图 编辑:程序博客网 时间:2024/06/06 11:47
一、 对于每一种类型的插件,通常至少需要两个类:
(1.) 一个是插件封装器类,它实现了插件通用的API函数;
比如QWSMouseHandler,其定义如下:
(2.)一个是一个或多个处理器类,每个处理器类都实现了一种用于特殊类型插件的API;
比如QWSLinuxInputMouseHandler,两者的关系如下:
QWSLinuxInputMouseHandler --> QWSCalibratedMouseHandler --> QWSMouseHandler
通过封装器类才能访问这些处理器类。
除此之外往往还会有一个名称含有"Factory"的类来在程序运行的时候自动创建合适的插件对象。
create的实现如下:注意:QMouseDriverFactory用于探测并且实例化可用的鼠标驱动,Embeded QT for Linux 在server application运行的时候加载合适的鼠标驱动。 Embeded QT for Linux提供几个内置的类来实现某些鼠标驱动,比如QWSLinuxInputMouseHandler ;另外,也支持使用Qt的插件机制来实现自定义的驱动程序,驱动程序的编写也要继承QWSMouseHandler来具体的进行实现。
(1.) 一个是插件封装器类,它实现了插件通用的API函数;
比如QWSMouseHandler,其定义如下:
- class Q_GUI_EXPORT QWSMouseHandler
- {
- public:
- explicit QWSMouseHandler(const QString &driver = QString(),
- const QString &device = QString());
- virtual ~QWSMouseHandler();
- virtual void clearCalibration() {}
- virtual void calibrate(const QWSPointerCalibrationData *) {}
- virtual void getCalibration(QWSPointerCalibrationData *) const {}
- virtual void resume() = 0;
- virtual void suspend() = 0;
- void limitToScreen(QPoint &pt);
- void mouseChanged(const QPoint& pos, int bstate, int wheel = 0);
- const QPoint &pos() const { return mousePos; }
- void setScreen(const QScreen *screen);
- protected:
- QPoint &mousePos;
- QWSMouseHandlerPrivate *d_ptr;
- }
该类实现了在嵌入式平台上,一个鼠标设备所具有的属性和方法。
(2.)一个是一个或多个处理器类,每个处理器类都实现了一种用于特殊类型插件的API;
比如QWSLinuxInputMouseHandler,两者的关系如下:
QWSLinuxInputMouseHandler --> QWSCalibratedMouseHandler --> QWSMouseHandler
通过封装器类才能访问这些处理器类。
除此之外往往还会有一个名称含有"Factory"的类来在程序运行的时候自动创建合适的插件对象。
比如,QMouseDriverFactory,其定义如下:
- class Q_GUI_EXPORT QMouseDriverFactory
- {
- public:
- static QStringList keys();
- static QWSMouseHandler *create(const QString&, const QString &);
- };
- QWSMouseHandler *QMouseDriverFactory::create(const QString& key, const QString &device){
- QString driver = key.toLower();
- #if defined(Q_OS_QNX) && !defined(QT_NO_QWS_MOUSE_QNX)
- if (driver == QLatin1String("qnx") || driver.isEmpty())
- return new QQnxMouseHandler(key, device);
- #endif
- #if defined(Q_OS_INTEGRITY) && !defined(QT_NO_MOUSE_INTEGRITY)
- if (driver == QLatin1String("integrity") || driver.isEmpty())
- return new QIntMouseHandler(key, device);
- #endif
- #ifndef QT_NO_QWS_MOUSE_LINUXTP
- if (driver == QLatin1String("linuxtp") || driver.isEmpty())
- return new QWSLinuxTPMouseHandler(key, device);
- #endif
- #ifndef QT_NO_QWS_MOUSE_PC
- if (driver == QLatin1String("auto")
- || driver == QLatin1String("intellimouse")
- || driver == QLatin1String("microsoft")
- || driver == QLatin1String("mousesystems")
- || driver == QLatin1String("mouseman")
- || driver.isEmpty()) {
- return new QWSPcMouseHandler(key, device);
- }
- #endif
- #ifndef QT_NO_QWS_MOUSE_TSLIB
- if (driver == QLatin1String("tslib") || driver.isEmpty())
- return new QWSTslibMouseHandler(key, device);
- #endif
- # ifndef QT_NO_QWS_MOUSE_LINUXINPUT
- if (driver == QLatin1String("linuxinput") || \
- driver == QLatin1String("usb") || \
- driver == QLatin1String("linuxis"))
- return new QWSLinuxInputMouseHandler(device);
- # endif
- #ifndef QT_NO_QWS_MOUSE_QVFB
- if (driver == QLatin1String("qvfbmouse") || driver == QLatin1String("qvfb"))
- return new QVFbMouseHandler(key, device);
- #endif
- #if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL)
- #ifndef QT_NO_LIBRARY
- if (QWSMouseHandlerFactoryInterface *factory = qobject_cast<QWSMouseHandlerFactoryInterface*>(loader()->instance(driver)))
- return factory->create(driver, device); /*注意:这个地方就会创建QMouseDriverPlugin实现的自定义插件类*/
- #endif
- #endif
- return 0;
- }
二、使用QMouseDriverPlugin来创建自定义的鼠标驱动程序
下面的文字来自于Qt的源文档:- /*!
- \class QMouseDriverPlugin
- \ingroup plugins
- \ingroup qws
- \brief The QMouseDriverPlugin class is an abstract base class for
- mouse driver plugins in Qt for Embedded Linux.
- Note that this class is only available in \l{Qt for Embedded Linux}.
- \l{Qt for Embedded Linux} provides ready-made drivers for several mouse
- protocols, see the \l{Qt for Embedded Linux Pointer Handling}{pointer
- handling} documentation for details. Custom mouse drivers can be
- implemented by subclassing the QWSMouseHandler class and creating
- a mouse driver plugin.
- A mouse driver plugin can be created by subclassing
- QMouseDriverPlugin and reimplementing the pure virtual keys() and
- create() functions. By exporting the derived class using the
- Q_EXPORT_PLUGIN2() macro, The default implementation of the
- QMouseDriverFactory class will automatically detect the plugin and
- load the driver into the server application at run-time. See \l
- {How to Create Qt Plugins} for details.
- \sa QWSMouseHandler, QMouseDriverFactory
- */
- /*!
- \fn QStringList QMouseDriverPlugin::keys() const
- Implement this function to return the list of valid keys, i.e. the
- mouse drivers supported by this plugin.
- \l{Qt for Embedded Linux} provides ready-made drivers for several mouse
- protocols, see the \l {Qt for Embedded Linux Pointer Handling}{pointer
- handling} documentation for details.
- \sa create()
- */
- /*!
- Constructs a mouse driver plugin with the given \a parent.
- Note that this constructor is invoked automatically by the
- Q_EXPORT_PLUGIN2() macro, so there is no need for calling it
- explicitly.
- */
具体的创建plugin的实例参见:
《How to Create Qt Plugins》
《Qt for Embedded Linux Pointer Handling》- Qt 插件
- Qt 插件
- Qt插件
- QT-插件
- [QT]qt plugin插件
- 【转】Qt 扩展插件
- Qt的插件机制
- Qt插件HOWTO
- QT插件机制
- Qt的插件机制
- qt 插件技术
- QT使用插件QAxWidget
- Qt 插件路径(笔记)
- Qt的插件机制
- QT按键插件代码
- QT插件开发方式
- Qt dedigner插件
- Qt中的插件
- Android 文件存储解决方案
- SpringMVC—文件下载
- 【JAVA】Class文件内容及常量池
- ProgressDialog.setCanceledOnTouchOutside(false);
- 从Jar包读取资源
- Qt插件
- 用单链表通过异或思想来实现双链表的功能
- MKMapView缩放显示全部annotation
- iOS 的keyChain
- JavaScript世界的一等公民 - 函数
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2----整体架构
- DragDrop 注册失败的解决方法(详细,经过测试)
- Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 3 ----数据访问层
- 设计模式笔记之---门面模式