QT浏览器插件的开发过程总结

来源:互联网 发布:mac能用的wow插件 编辑:程序博客网 时间:2024/05/17 06:55

QT浏览器插件的网址:http://doc.qt.nokia.com/solutions/4/qtbrowserplugin/index.html

插件的主要实现是在一个.cpp中,其中包括类的定义和实现。由于它需要用到.moc文件所以在类的定义中必须要有Q_OBJECT,如

class Trivial:public QMainWindow, public QtNPBindable
{
    Q_OBJECT
        //  Q_PROPERTY(QString text READ text WRITE setText)

        Q_CLASSINFO("ClassID", "{5a22176d-118f-4185-9653-9f98958a6df8}")
        Q_CLASSINFO("InterfaceID", "{2df735ba-da4f-4fb7-8f35-b8dfbf8cfd9a}")
        Q_CLASSINFO("EventsID", "{449de213-f8bd-4d2e-a2cf-eab407c03245}")

        Q_CLASSINFO("MIME", "trivial/very:xxx:Trivial and useless")
        Q_CLASSINFO("ToSuperClass", "Trivial")
        Q_CLASSINFO("DefaultProperty", "text")

public:
 Trivial(QWidget *parent = 0);
 ~Trivial();

......................

}


//接下来是插件想要实现的功能

最后是

#include "trivial.moc"

QTNPFACTORY_BEGIN("Trivial Qt-based Plugin","A Qt-based LiveConnected plug-in that doesnothing")

   QTNPCLASS(Trivial)

QTNPFACTORY_END()

 

#ifdef QAXSERVER

#include<ActiveQt/QAxFactory>

QAXFACTORY_BEGIN("{aa3216bf-7e20-482c-84c6-06167bacb616}","{08538ca5-eb7a-4f24-a3c4-a120c6e04dc4}")

    QAXCLASS(Trivial)

QAXFACTORY_END()

#endif

 

其中Q_OBJECT必须得有,只要需要生成.moc文件就必须得有Q_OBJECT

编写插件的时候,注意修改Q_CLASSINFO("MIME","trivial/very:xxx:Trivial and useless")这一句,MIME要与自己的插件类型相同。

还有下面的QTNPCLASS(Trivial)和QAXCLASS(Trivial)QTNPCLASS(Trivial)是输出类,是QTNPFACTORY的宏。每一个源文件只能有一次,如果插件需要输出多个类(即有不同的多个MIME types),需要使一个QTNPCLASS分别对应一个MIME type类型。

 QMainWindow是一种顶层窗口,正常使用时,它会弹出浏览器页面,但是如果想让基于QMainWindow的窗口嵌入浏览器页面上,需要加一句setparent();这句话可以使QMainWindow去掉window属性,而变成QWidget,从而作为QWidget的子窗口。


建立插件工程可以用CMake建立,也可以写pri文件用Qmake生成.pro。用cmake建立工程的话,CmakeLists文件例子如下:

#trivial MakeList
PROJECT(trivial)
CMAKE_MINIMUM_REQUIRED( VERSION 2.8.4 )
AUX_SOURCE_DIRECTORY(. SRC_LIST)
IF(WIN32)
   SET(SRC_LIST ${SRC_LIST} trivial.rc)
ENDIF()

SET(CMAKE_BIN_PATH "${PROJECT_SOURCE_DIR}/${CMAKE_SYSTEM_NAME}/${CMAKE_BUILD_TYPE}/")
MESSAGE("System Name:${CMAKE_SYSTEM_NAME}")


FIND_PACKAGE(Qt4 REQUIRED QtCore QtGui QtXml)
IF(QT4_FOUND)
    MESSAGE("QT_LIBRARIES is ${QT_LIBRARIES}")
    MESSAGE("QT_USE_FILE is ${QT_USE_FILE}")
    INCLUDE(${QT_USE_FILE})
    ADD_DEFINITIONS(${QT_DEFINITIONS})
    QT4_GENERATE_MOC(trivial.cpp ${CMAKE_CURRENT_BINARY_DIR}/trivial.moc)
    INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
   
    QT4_WRAP_CPP(SDPlugin_MOCS qtbrowserplugin.h qtnpapi.h qtbrowserplugin_p.h)
    SET(SRC_LIST ${SRC_LIST} qtbrowserplugin.def)
 
    ADD_LIBRARY(npsdplugin SHARED ${SRC_LIST} ${CMAKE_CURRENT_BINARY_DIR}/trivial.moc ${SDPlugin_MOCS} )
    TARGET_LINK_LIBRARIES(npsdplugin ${QT_LIBRARIES})

ELSE()
    MESSAGE("cant find qt4 !!!!!!!!!!")
ENDIF()

其中工程中的.cpp和.h文件除了plugin.cpp外,公用的还有qtbrowserplugin.cpp、qtbrowserplugin.h、qtbrowserplugin_win.cpp、qtbrowserplugin_p.h、qtnpapi.h这5个文件。

原创粉丝点击