QT浏览器插件开发入门

QT浏览器插件开发入门
QT浏览器插件开发入门

QT浏览器插件开发入门

1 简介

主流的浏览器插件开发主要分为两种:

●ActiveX控件,适合IE内核的浏览器

●NPAPI插件,适合Netscape浏览器的开发

NPAPI全称为 Netscape Plugin Application Programming Interface

在QT4.7.2下有这两种模式的开发支持,相关资料可在Qt文档网站上找到,ActiveX 开发有QT提供ActiveQT server library支持库(QT4.7.2),NPAPI开发QT4.7.2本身无此支持,需要下载相关的API,下载qt-solutions-qt-solutions-master.tar.gz,解压后qtbrowserplugin目录就是。

下面是完成的一个测试,首先做了一个功能库imagedemo,主要完成一个图片的显示功能,现在将它分别封装为ActiveX控件和NPAPI插件,供不同浏览器调用。

2 ActiveX

2.1 创建QT Application工程

工程名称:npgraphapp,创建时注意必须选择ActiveQT server library,如下图

2.2 创建资源文件

文件npgraphapp.rc中就一句话:

1 TYPELIB "npgraphapp.rc"

2.3 修改类npgraphapp.h

在文件中增加Q_CLASSINFO信息,代码如下:

#ifndef NPGRAPHAPP_H

#define NPGRAPHAPP_H

#include

class npgraphapp : public QWidget

{

Q_OBJECT

Q_CLASSINFO("ClassID", "{4CFCDEDD-F2F6-42E9-8671-D63D7B15AA2C}");

Q_CLASSINFO("InterfaceID", "{615B202B-C4F2-4C9F-B9F5-2F9D52ECF0BC}");

Q_CLASSINFO("EventsID", "{C9C4EB5F-F926-4770-AA7F-50702B53DB3E}");

public:

npgraphapp(QWidget *parent = 0);

~npgraphapp();

};

#endif // NPGRAPHAPP_H

2.4 修改main.cpp

在文件中增加QAXFACTORY_BEGIN宏,代码如下:

#include "npgraphapp.h"

#include

#include

QAXFACTORY_BEGIN("{5E2C9F73-03E9-4351-9ECC-C46697D1A8D5}",

"{443A7F7F-FFE1-498A-AECB-D3EBCD5810CB}")

QAXCLASS(npgraphapp)

QAXFACTORY_END()

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

if ( !QAxFactory::isServer() )

{

npgraphapp* w = new npgraphapp();

w->show();

}

return a.exec();

}

2.5 修改工程属性

增加生成事件,如下图:

在命令行中编辑(注册ActiveX控件)

C:\Qt\4.7.2\bin\idc.exe $(TargetPath) /idl $(IntDir)\npgraphapp.idl -version 1.0

if errorlevel 1 goto VCReportError

midl $(IntDir)\npgraphapp.idl /nologo /tlb $(IntDir)\npgraphapp.tlb

if errorlevel 1 goto VCReportError

C:\Qt\4.7.2\bin\idc.exe $(TargetPath) /tlb $(IntDir)\npgraphapp.tlb

if errorlevel 1 goto VCReportError

C:\Qt\4.7.2\bin\idc.exe $(TargetPath) /regserver

2.6 注册和调用

工程编译后自动生成事件会注册组件,注意看编译信息是否注册成功

测试组件

HEIGHT="80%" WIDTH="80%" ALIGN="LEFT" >

问题:如果仅仅在界面上绘制可创建QT Active库,如果界面上需调用其它QT控件或自定义的QT控件,需创建为可执行文件才可以

3 NPAPI

3.1 创建QT Library工程

名称:npgraphdemo

下载qt-solutions-qt-solutions-master.tar.gz,解压后qtbrowserplugin目录就是NPAPI 的封装支持,使用src中的文件,将下列的五个文件拷贝到工程目录下,在工程中加入

qtnpapi.h

qtbrowserplugin.h

qtbrowserplugin_p.h

qtbrowserplugin.cpp

qtbrowserplugin_win.cpp(windows操作系统)

3.2 增加资源文件

文件名称是npgraphdemo.rc,内容如下

1 VERSIONINFO

FILEVERSION 1,0,0,1

PRODUCTVERSION 1,0,0,1

FILEFLAGSMASK 0x3fL

#ifdef _DEBUG

FILEFLAGS 0x1L

#else

FILEFLAGS 0x0L

#endif

FILEOS 0x4L

FILETYPE 0x2L

FILESUBTYPE 0x0L

BEGIN

BLOCK "StringFileInfo"

BEGIN

BLOCK "040904e4"

BEGIN

VALUE "Comments", "\0"

VALUE "CompanyName", "Nokia\0"

VALUE "FileDescription", "grapher\0"

VALUE "FileExtents", "g1n\0"

VALUE "FileOpenName", "Graphable data (*.g1n)\0"

VALUE "FileVersion", "1, 0, 0, 1\0"

VALUE "InternalName", "npgraphdemo\0"

VALUE "LegalTrademarks", "\0"

VALUE "MIMEType", "application/grapher"

VALUE "OriginalFilename", "npgraphdemo.dll\0"

VALUE "PrivateBuild", "\0"

VALUE "ProductName", "grapher npapi example\0"

VALUE "ProductVersion", "1, 0, 0, 1\0"

VALUE "SpecialBuild", "\0"

END

END

BLOCK "VarFileInfo"

BEGIN

VALUE "Translation", 0x409, 1252

END

END

注意VALUE "MIMEType", "application/grapher"这句,其中的MIMEType后面字符串为自定义类型

3.3 新建模块定义文件

在工程选择“新建项”,创建npgraphdemo.def,如下图

文件内容:

LIBRARY "npgraphdemo"

EXPORTS

NP_GetEntryPoints @1

NP_Initialize @2

NP_Shutdown @3

3.4 修改npgraphdemo.h

在文件增加Q_CLASSINFO定义,

注意Q_CLASSINFO("MIME", "application/grapher:g1n:Graphable ASCII numeric data"),此处的定义要和资源文件的MIMEType定义的一致

#ifndef GRAPHFROM_H

#define GRAPHFROM_H

#include

#include

QT_BEGIN_NAMESPACE

class QVBoxLayout;

QT_END_NAMESPACE

class npgraphdemo : public QWidget, public QtNPBindable

{

Q_OBJECT

Q_CLASSINFO("ClassID", "{2e5b2715-46b2-4831-ba9b-6a3b195d5ec8}")

Q_CLASSINFO("InterfaceID", "{94581136-3c0c-46cc-97a1-066061356d43}")

Q_CLASSINFO("EventsID", "{8c191b77-1894-45c7-9d6b-201dede95410}")

Q_CLASSINFO("MIME", "application/grapher:g1n:Graphable ASCII numeric data")

Q_CLASSINFO("ToSuperClass", "npgraphdemo")

public:

npgraphdemo(QWidget *parent = 0);

~npgraphdemo();

};

#endif // GRAPHFROM_H

3.5 修改npgraphdemo.cpp

在文件中增加QTNPFACTORY_BEGIN宏

#include "npgraphdemo.h"

#include "imagedemo.h"

npgraphdemo::npgraphdemo(QWidget *parent) : QWidget(parent)

{

}

npgraphdemo::~npgraphdemo()

{

}

QTNPFACTORY_BEGIN("Qt-based Graph Plugin", "A Qt-based NSAPI plug-in that graphs numeric data"); QTNPCLASS(npgraphdemo)

QTNPFACTORY_END()

3.6 修改工程属性

在“C/C++”下“预处理器”选项,增加”_X86_”,如下图

编译即可

3.7 注册和调用

注册方法如下

1、在命令行中输入regedit,打开注册表编辑

2、在HKEYLOCALMACHIN\SOFTWARE\MozillaPlugins下新建子项@https://www.360docs.net/doc/4d2975749.html,/demo

3、新建字符串数据”Path”设置为动态库所在路径

“D:\VictorySoft\SeisDataServer\01Develop\TestCode\npdemo\Debug\ npgraphdemo.dll”

在网页中加入如下语句,可测试调用

Plugin not installed!

问题:

1、与网页的交互模式

2、自动的打包和注册

QT中的网络编程实例

QT中的网络编程实例 Qclient.h /**************************************************************************** ** $Id: /sample/10/qclient.h 2.3.2 edited 2004-10-12 $ ** ** Copyright (C) 2004-2005 OURSELEC AS. All rights reserved. ** https://www.360docs.net/doc/4d2975749.html, ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef QCLIENT_H #define QCLIENT_H #include #include #include #include #include #include #include #include #include class QClient : public QWidget { Q_OBJECT public: QClient(QWidget *parent = 0, const char *name = 0); private slots: void closeConnection(); void sendToServer(); void connectToServer(); void socketReadyRead(); void socketConnected(); void socketConnectionClosed(); void socketClosed(); void socketError(int); private: QSocket *socket; QTextView *infoText;

嵌入式Linux下用Qt Designer开发及实例

嵌入式Linux用Qt Designer快速开发 RAD(快速应用程序开发)是一种高效的软件开发形式,可以让用户在极短的时间里创建一个图形化的用户界面。通常情况下,在一张空白的表单上,开发人员可以通过拖拉或点击的方式,在窗口的适当位置上添加一些输入框和按钮等窗口组件。这时,RAD工具会自动编写和维护代码。而用户所要做的只是确定当点击按钮或选择选单选项时将要发生什么事件。 在Linux下,一个非常流行的RAD工具就是Qt Designer。它是嵌入式公司Trolltech 的Qt软件包的一个组成部分。如果用户使用的是KDE桌面,那么Qt已经自动安装上了,Qt Designer也很有可能已经被安装好。如果用户的系统没有安装,那么针对不同的版本,可以很方便地找到KDE Development Tools,并安装之。以Red Hat 9.0为例,用户可以从主选单→系统设置→添加/删除应用程序中选择KDE 软件开发,即可完成Qt Designer的安装(如图1所示)。 图1 安装Qt Designer 创建 为了快速地向大家展示一下Qt Designer功能,先创建一个简单的摄氏温度和华氏温度的转换程序。本文里将设计一个简单的GUI,并且添加一些简单的代码来实现温度的转换。因为是为了展示一下快速的开发过程,而不是一个严谨的软件项目的开发,所以这里不会进行任何的错误检查,也不进行输入检验(也就是检查用户的输入是否为合法的温度形式)、缓冲溢出检查等在日常软件开发中一定要做的步骤。

如果用户使用的是KDE,那么选单上应该已经有Qt Designer的图标。不同的发行版,图标的位置会有所不同。如果用户的发行版没有Qt Designer图标,那么可以在命令行模式下输入“designer”命令来启动该开发工具。在Red Hat 9.0中,可以通过点击主选单→编程→更多编程工具→Qt Designer来启动(如图2)。 图2 启动Qt Designer Qt Designer首先呈现给用户的是一个New/Open对话框(如图3所示)。因为这里要创建一个C++程序,所以在此选择C++ Project,点击“OK”继续。 图3 New/Open对话框 选择一个想要保存文件的位置,并且给出一个文件名,在此使用的文件名是cfconv。注意这里文件名的扩展名一定要是.pro。点击“Save”后,返回到了Project

让Qt应用程序只运行一个实例 - 开源中国社区

首页 开源项目 Java 开源软件 C# 开源软件 PHP 开源软件 C/C++ 开源软件 Ruby 开源软件 Python 开源软件 Go开源软件 JS开源软件 问答 技术问答 ? 技术分享 ? IT大杂烩 ? 职业生涯 ? 站务/建议 ? 支付宝专区 ? MoPaaS专区 ? 开源硬件专区 ? 代码 博客 翻译 资讯 移动开发 Android开发专区 iOS开发专区 iOS代码库 Windows Phone 招聘 城市圈 你还没加入城市圈 全部城市圈xuyanghpu,您好 我的空间 站内留言 我的讨论记录 我分享的代码 我的博客 我关注的人 我的收藏夹 个人资料修改 更改我的头像 | 添加软件 | 投递新闻 | 退出开源中国 代码分享 当前位置:

分享到: 收藏 +15踩顶0[全屏查看所有代码]代码分享 ? C/C++ ? 图形界面开发/GUI/CGI 资讯、软件、分享、代码、搜 索 让Qt应用程序只运行一个实例 鉴客 发布于 2010年10月21日 17时, 2评/5284阅 在实际应用中,我们经常需要让应用程序只有一个实例,再打开新的文档或者页面时,只是替换现在的窗口或者新打开一个标签,而不是重新启动一次应用程序。Qt中是否可以做到这样呢,答案是肯定的,因为Qt本身可以直接调用系统API,肯定可以做到,但是我们希望找到一个跨平台的通用的解决方案。这就要用到Qt的QLocalSocket,QLocalServer类了,这两个类从接口上看和网络通信socket没有区别,但是它并不是真正的网络API,只是模仿了而已。这两个类在Unix/Linux系统上采用Unix域socket 实现,而在Windows上则采用有名管道(named pipe)来实现。 既然是网络API,那么思路就很简单了,应用程序启动时首先会去连一个服务器(这里通过应用程序的名字来标识,就像网络端口一样),如果连接失败,那么则自己是第一个实例,就创建这么一个服务器,否则将启动参数发送到服务器,然后自动退出,而服务器会在收到通知以后进行处理。 这些动作我想最好是放在创建Application实例后,因为Qt本身有很多操作没有Application实例是无法进行操作的(至少事件循环是在创立Application以后才能启动吧),因此最好的位置就是通过继承QApplicaiton或者QCoreApplication自定义一个YourOwnApplication,然后在构造函数中进行,下面是一个示意。 首先是YourOwnApplication构造函数: 标签: QApplicaiton QLocalSocket QLocalServer Qt 代码片段(1) 1. [代码]cpp代码 1234567891011121314151617Q S t r i n g s e r v e r N a m e = Q C o r e A p p l i c a t i o n ::a p p l i c a t i o n N a m e (); Q L o c a l S o c k e t s o c k e t ;s o c k e t .c o n n e c t T o S e r v e r (s e r v e r N a m e ); i f (s o c k e t .w a i t F o r C o n n e c t e d (500)) { //如果能够连接得上的话,将参数发送到服务器,然后退 Q T e x t S t r e a m s t r e a m (&s o c k e t ); Q S t r i n g L i s t a r g s = Q C o r e A p p l i c a t i o n ::a r g u m e n t s (); i f (a r g s .c o u n t () > 1) s t r e a m << a r g s .l a s t (); e l s e s t r e a m << Q S t r i n g (); s t r e a m .f l u s h (); s o c k e t .w a i t F o r B y t e s W r i t t e n (); q A p p ->q u i t (); ?

Qt界面美工实例

Qt StyleSheet样式表实例 在涉及到Qt 美工的时候首先需要掌握CSS 级联样式表。 下面将通过几个例子来介绍一下怎样使用Qt中的部件类型设计。自定义的前台背景与后台背景的颜色: 如果需要一个文本编辑器的背景变为黄色,下面是代码行: qApp->setStyleSheet("QLineEdit { background-color: yellow }"); 针对一个对话框的内容中使用QLineEdit以及QLineEdit的子类的背景都变成黄色,下面是代码: myDialog ->setStyleSheet("QLineEdit { background-color: yellow }"); 如果只需要制定一个QLineEdit的内容,将使用QObject::setObjectName() 下面是一个实例: myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }"); 同时也可以针对每一个指定的部件做直接的类型设置,下面是一个实例: https://www.360docs.net/doc/4d2975749.html,Edit->setStyleSheet("background-color: yellow"); 为了做一个鲜明的对比,将要为文本设置合适的颜色。 nameEdit->setStyleSheet("color: blue; background-color: yellow"); 当然最好的办法还有针对选择的文本来进行设置,下面设置了一个选择文本的类型属性:nameEdit->setStyleSheet("color: blue;" "background-color: yellow;" "selection-color: yellow;" "selection-background-color: blue;"); 在有一些情况下,不需要用户参与,而有软件设计人员来自己制定样式,即使这些是有违审美角度。下面就从应用程序开发角度来设计样式。 *[mandatoryField="true"] { background-color: yellow } 上面的意思是一些强制的区域是需要用Qt 的属性管理来强制设置成为黄色的背景。 这样一些强制的部件,将需要通过函数来设置当前的属性已经被强制设置,下面是实现的代码:

如何在Qt中使用Qt 3D开发程序

如何使用Qt 3D开发3D场景程序? 目前Qt已经提供大量的3D API的支持了,作为对OPENGL的一种补充,QT 3D使用起来更加方便,并且跨平台。但是Qt中关于QT 3D的文档并不是很全面。很多初学者包括我自己现在都是摸索着前进的。网上虽然也有教程,但是却都是让人云里雾里不知所以然的。不过以后会好很多的了,因为Qt即将发布qt3DStudio了,有了这个工具,咱们以后开发qt3D 的程序时就容易上手了。 首先我们需要找到Qt 3D的帮助文档,我们直接在QtCreator中搜索qt3d,然后就可以看到和3D相关的文档了。这里我们类比一下其他3D程序的开发工具,譬如Unity3D,采用C#语言开发,而QtStudio以后就应该是C++和QML开发了,所以大家如果没用过Unity3D,也可以去下载一个试试看,建立一个初步的认识。

然后我们还需要查看Qt3D的案例,这些案例里面有一些图片和材料文件,估计初学者都不知道是什么东西,如果我们要仿照案例去写自己的程序,又该如何入手呢?这里我们需要两个工具,一个是blender,Linux下最流行的3D建模软件,blender也可以在MAC和Windows 上使用,因为它是跨平台的。大家可以直接使用sudo apt-get install blender进行安装。 Blender软件是用来查看Qt 3D例子中资源文件中的obj材料文件的,如下图。我们可以使用blender打开这些obj文件,也可以自己动手做一些材料,然后导出为obj文件。导入导出见下图。

然后我们在上面还看到一种图片,这种图片格式很新颖,我还是第一次见,估计初学者很多也是第一次见吧。所以既然Qt用到了,咱们仿写程序的时候,没有这个图片可就不好办了。所以这里我们还要另一工具,cwebp,大家可以使用sudo apt-get install webp安装即可。Webp 格式的图片是谷歌开发的一种新型的比jpg,png等图片更适合在网络上进行传输的图片,将来估计会广泛使用的,这里我们就先跟着QT尝个鲜吧。

相关文档
最新文档