#include "QAxBrowser.h"
#include "ui_QAxBrowser.h"
#include "cactivexwidget.h"
#include <ActiveQt/QAxBase>
#include <QAxObject>
#include <iostream>
#include <mshtmhst.h>
QAxBrowser::QAxBrowser(QWidget *parent) :
QWidget(parent),
ui(new Ui::QAxBrowser)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);
}
QAxBrowser::~QAxBrowser()
{
delete ui;
}
void QAxBrowser::navigate(QString const& address)
{
ui->axWidget->dynamicCall("Navigate(const QString&)", address);
}
void QAxBrowser::goBack()
{
ui->axWidget->dynamicCall("GoBack()");
}
void QAxBrowser::goForward()
{
ui->axWidget->dynamicCall("GoForward()");
}
void QAxBrowser::goHome()
{
ui->axWidget->dynamicCall("GoHome()");
}
void QAxBrowser::goSearch()
{
ui->axWidget->dynamicCall("GoSearch()");
}
void QAxBrowser::stop()
{
ui->axWidget->dynamicCall("Stop()");
}
void QAxBrowser::refresh()
{
ui->axWidget->dynamicCall("Refresh()");
}
void QAxBrowser::setSlient(bool slient)
{
if(slient)
ui->axWidget->setProperty("Silent", "true");
else
ui->axWidget->setProperty("Silent", "false");
}
//================================================================================
void QAxBrowser::on_axWidget_NavigateComplete(const QString &URL)
{
qDebug() << "slot on_axWidget_NavigateComplete ==>" << URL;
}
void QAxBrowser::on_axWidget_OnQuit()
{
emit onQuit();
}
void QAxBrowser::on_axWidget_ProgressChange(int Progress, int ProgressMax)
{
emit progressChange(Progress, ProgressMax);
}
void QAxBrowser::on_axWidget_DownloadBegin()
{
emit downloadBegin();
}
void QAxBrowser::on_axWidget_DownloadComplete()
{
emit downloadComplete();
}
void QAxBrowser::on_axWidget_BeforeNavigate(const QString &URL, int Flags, const QString &TargetFrameName, QVariant &PostData, const QString &Headers, bool &Cancel)
{
emit beforeNavigate(URL, Flags, TargetFrameName, PostData, Headers, Cancel);
}
void QAxBrowser::on_axWidget_NavigateComplete2(IDispatch *pDisp, QVariant &URL)
{
qDebug() << "slot on_axWidget_NavigateComplete2 ==>" << URL;
}
void QAxBrowser::on_axWidget_DocumentComplete(IDispatch *pDisp, QVariant &URL)
{
emit documentComplete(pDisp, URL);
qDebug() << "slot on_axWidget_DocumentComplete ==>" << URL;
{
QAxObject *document = ui->axWidget->querySubObject("Document");
if(!document)
return ;
//调用方式一
ICustomDoc *doc2 = NULL;
document->queryInterface(QUuid(IID_ICustomDoc), (void**)&doc2);
if (doc2) {
doc2->SetUIHandler(&dochost);
}
//调用方式二 //该方法在页面刷新后会失效,需要再次调用一次
// QAxObject *parentWindow = document->querySubObject("parentWindow");
// if(parentWindow)
// {
// QAxObject obj(&m_call, this);
// parentWindow->dynamicCall("SaveCppObject (QAxObject*)", obj.asVariant());
// }
}
}
void QAxBrowser::on_axWidget_NavigateError(IDispatch *pDisp, QVariant &URL, QVariant &Frame, QVariant &StatusCode, bool &Cancel)
{
qDebug() << "slot on_axWidget_NavigateError ==>" << URL << " " << StatusCode;
}
void QAxBrowser::on_axWidget_CommandStateChange(int Command, bool Enable)
{
emit commandStateChange(Command, Enable);
}
void QAxBrowser::on_axWidget_NewProcess(int lCauseFlag, IDispatch *pWB2, bool &Cancel)
{
emit newProcess(lCauseFlag, pWB2, Cancel);
}
void QAxBrowser::on_axWidget_NewWindow(const QString &URL, int Flags, const QString &TargetFrameName, QVariant &PostData, const QString &Headers, bool &Processed)
{
qDebug() << "slot on_axWidget_NewWindow ==>" << URL;
}
void QAxBrowser::on_axWidget_OnFullScreen(bool FullScreen)
{
emit onFullScreen(FullScreen);
}
void QAxBrowser::on_axWidget_OnVisible(bool Visible)
{
emit onVisible(Visible);
}
void QAxBrowser::on_axWidget_PrintTemplateInstantiation(IDispatch *pDisp)
{
emit printTemplateInstantiation(pDisp);
}
void QAxBrowser::on_axWidget_PrintTemplateTeardown(IDispatch *pDisp)
{
emit printTemplateTeardown(pDisp);
}
void QAxBrowser::on_axWidget_PropertyChange(const QString &szProperty)
{
emit propertyChange(szProperty);
}
void QAxBrowser::on_axWidget_StatusTextChange(const QString &Text)
{
emit statusTextChange(Text);
}
void QAxBrowser::on_axWidget_TitleChange(const QString &Text)
{
emit titleChange(Text);
}
void QAxBrowser::on_axWidget_windowTitleChanged(const QString &title)
{
emit windowTitleChanged(title);
}
void QAxBrowser::on_toolButton_clicked()
{
qDebug() << ui->axWidget->dynamicCall("LocationURL");
qDebug() << ui->axWidget->property("LocationURL");
}
void QAxBrowser::on_axWidget_FrameBeforeNavigate(const QString &URL, int Flags, const QString &TargetFrameName, QVariant &PostData, const QString &Headers, bool &Cancel)
{
qDebug() << "slot on_axWidget_FrameBeforeNavigate ==>" << URL;
}
static WNDPROC preWndProc;
LONG shieldMenuWndProc(HWND hwnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
if(msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) //屏蔽鼠标右键
return 0;
return CallWindowProc((WNDPROC)preWndProc, hwnd, msg, wParam, lParam);
}
void QAxBrowser::shieldContextMenu()
{
HWND widgetHwnd = (HWND)ui->axWidget->winId();
if (widgetHwnd > 0)
{
HWND ieServerHwnd = GetTopWindow(widgetHwnd); //QAxHostWidgetWindow
ieServerHwnd = GetWindow(ieServerHwnd, GW_CHILD); //Shell Embedding
ieServerHwnd = GetWindow(ieServerHwnd, GW_CHILD); //Shell DocObject View
ieServerHwnd = GetWindow(ieServerHwnd, GW_CHILD); //Internet Explorer_Server
if (ieServerHwnd > 0)
{
if (GetWindowLong(ieServerHwnd, GWL_WNDPROC) != (LONG)&shieldMenuWndProc)
{
qDebug() << "shield Menu";
preWndProc = (WNDPROC)::SetWindowLong(ieServerHwnd,GWL_WNDPROC,(LONG)shieldMenuWndProc);
}
else
{
qDebug() << "ignore";
}
}
}
}
//Class:类
//IIDClass:类ID的标识
//IIDInterface:接口ID的标识
//IIDEvents:事件ID的标识
//IIDTypeLib:类型库的输出ID标识
//IIDApp:
//QAXFACTORY_DEFAULT(QAxBrowser,
// "{22F6B469-A701-4A1B-9CB2-8CD85C3021CD}",
// "{48107DA9-41A3-4E61-BBA6-CD1933C89079}",
// "{8D72F8C4-CCD3-46A7-B79C-CA9247327C4D}",
// "{36548113-FB7A-4F75-9522-EB11995447D6}",
// "{122099DF-8646-44F3-B718-E46559788B7E}")
void QAxBrowser::on_axWidget_NewWindow3(IDispatch **ppDisp, bool &Cancel, uint dwFlags, const QString &bstrUrlContext, const QString &bstrUrl)
{
qDebug() << "slot on_axWidget_NewWindow3 ==>" << bstrUrl;
}
/*
{
//Qt在页面加载完成后,主动调用JavaScript代码,并将实现了的IDispatch接口对象传递给JavaScript
//从而实现JavaScript与Qt直接的交互
QAxObject *document = ui->axWidget->querySubObject("Document");
if(!document)
return ;
// ICustomDoc *doc2 = NULL;
// document->queryInterface(QUuid(IID_ICustomDoc), (void**)&doc2);
// if (doc2) {
// doc2->SetUIHandler(&dochost);
// }
// QAxObject *parentWindow = document->querySubObject("parentWindow");
// if(parentWindow)
// {
// QAxObject obj(&dlg, this);
// parentWindow->dynamicCall("SaveCppObject (QAxObject*)", obj.asVariant());
// }
}
*/
没有合适的资源?快使用搜索试试~ 我知道了~
Qt嵌入IE,与Javascript交互示例
共71个文件
sample:10个
h:7个
cpp:4个
2星 需积分: 50 63 下载量 82 浏览量
2018-12-24
13:59:21
上传
评论
收藏 62KB ZIP 举报
温馨提示
实现qt内嵌ie与js交互,主要实现两种方式,一种js主动调用,一种是qt传递idispatch给js,然后通过该对象调用
资源推荐
资源详情
资源评论
收起资源包目录
QAxBrowser.zip (71个子文件)
QAxBrowser
QExternalDocHostUIHandler.h 4KB
QAxBrowser.cpp 7KB
res
a.html 3B
res.qrc 94B
.git
index 2KB
hooks
pre-push.sample 1KB
prepare-commit-msg.sample 1KB
applypatch-msg.sample 478B
pre-commit.sample 2KB
pre-receive.sample 544B
pre-applypatch.sample 424B
commit-msg.sample 896B
pre-rebase.sample 5KB
update.sample 4KB
post-update.sample 189B
config 188B
description 73B
refs
tags
heads
master 41B
logs
refs
heads
master 444B
HEAD 444B
objects
bc
2883f28fe4387fbadf3f5b4c7b1a8e05c59e40 120B
64
c0b9ac0796ee47276721c1fe0771e3d34d651e 2KB
c8
a60ef3306ecbab50e5974e6450ba8e19e38d33 51B
ef
6971f0944e4184377025b5a5a4deea118ae5af 610B
a2
c63e431c4cfc9cbeeece3f12edc9c1d3ff2b79 60B
3e
e320a4a03ccbea6e61a6490ad66996e495b75a 181B
db
3afdd64ef787ee23e25aea672cc78eb79539f8 420B
82
0bc56c48f9fe66c5060fa55c1aed8b3f949e35 106B
d7
b5c2e09044fd8350ecb8f765e3fd382913e906 893B
69
ec23d1a006975ab676e94ad2d8166405758314 18B
2a
47debff4d03b1526ed78ed2732bb170df5913f 1KB
d1
5a209e13e8f97e1b1ba390777b25fe42a3f387 437B
c7
219e989fa46a4da1a287bf02afc093db134a3e 419B
ac
b936e61c54335893f91924300a8efaa3b78e79 1KB
info
81
2947bc9ba7997cf9c02a1a683f9ec2cad8ca7b 61B
10
6e2087aaf7de2c09d830299fbef519e12a8183 3KB
c4
399a5bcd40221792c24497d36736519aca8d15 344B
95
a66ec5decb5888402f80b30dc757c6e313888f 193B
dd
7678ba40a3c700b1cf96639cf9880b0f8536c3 526B
pack
00
9c3f608d39cb5f5610731017a64ef65922aa1d 944B
0e
39bf270718f35abdd526f95ca3b3cf762ed8c7 348B
4e
aa689933276963766c6df83a7507bcc092e168 147B
aa
a5ef3d40e46572f40ee7735895a6475b79d2eb 421B
9b
de968a995d5dca10e3a94cf08122748d3a5ff3 1KB
7c
43e5eafa9913df55c4b14a1f1f7698de744386 182B
0d
82c4cfebef5a1835ec1c971248f71382090b4e 229B
56
621eef6e813956c997d8955c9936f4310c1313 433B
38
86a2c9c92bff31e76b7634636d3caa42485eff 78B
2f
85974297ba81f8eabfb0bd3a5744d05fe4ce91 268B
7d
e28905ad0166650a9b88281a25cdb394095437 254B
d2
58f18460529489ae09fb8e217e7ea15b83b6f3 729B
3c
a8c17a283f13060d9047a0fbc84f5dec62c7b7 182B
08
9e03a83081ace7092792cad7ae76830007f09b 523B
94
c68c07f467082808bf42c9013ddf47378b3f86 73B
03
3b36e215ae2dcbca92dbbf754a96dcab706bd7 217B
info
exclude 240B
COMMIT_EDITMSG 2B
HEAD 23B
QAxBrowser.h 4KB
QAxBindImpl.h 2KB
ObjectSafetyImpl.h 1KB
CActivexWidget.h 463B
QAxBindImpl.cpp 359B
hello
hello.h 427B
hello.cpp 694B
hello.ui 461B
QAxBrowser.ui 3KB
QAxBrowser.pro 2KB
main.cpp 290B
QJsCallCppHandler.h 7KB
QAxBrowser.pro.user 23KB
共 71 条
- 1
资源评论
- xmkl1232020-07-11用不了,缺胳膊少腿。
- luyuan12172020-06-22js部分 没有
- caoyj2020-01-07可以使用的
- XiangDong_2022-05-06工程在qt5.9.9下编译失败,无法运行,资源中无html文件,无JS文件,差评
beyond0851
- 粉丝: 18
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- XILINXFPGA源码Xilinxspratan3xcs100E(VGAPS2)
- XILINXFPGA源码XilinxSPARTAN-3E入门开发板实例
- XILINXFPGA源码XilinxSdramVerilog和VHDL版本文档
- 物联网智能家居方案-基于Nucleo-STM32L073&机智云(大赛作品,文档齐全,可直接运行)(文档加Matlab源码)
- XILINXFPGA源码XilinxISE9.xFPGACPLD设计源码
- 成都市地图含高新区(高新南区,高新西区),天府新区,东部新区虚拟行政区划
- XILINXFPGA源码XilinxEDK设计试验
- XILINXFPGA源码XilinxEDKMicroBlaze内置USB固件程序
- 基于 django 的视频点播后台管理系统源代码+数据库
- 基于Java的网上医院预约挂号系统的设计与实现(部署视频)-kaic.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功