1.使用QAxObject嵌入微软ActiveX软件
使用QAxObject需要包含Qt模块:
QT +=axcontainer;
注:
1.此方式只针对微软的组件才有效,不可以用来加载第三方的应用程序;
2.获取该组件的相关的API接口文档可以采用以下方式:
QAxObject *pAxobject = new QAxObject(this);
QString strApiDoc = pAxobject->generateDocumentation();
2.使用QWebView加载网页
使用QWebView需要包含Qt模块:
QT += webkits;
需要包含的头文件:
#include <QWebView>
#include <QUrl>
加载web网页:
QWebView *pWebView = new QWebView(this);
pWebView->Load(QUrl::fromUserInput("http://www.baidu.com"));
pWebView->Show();
注:
1.此方式当时在Qt5.6版本和VS编译器版本MSVC 2013_64中测试有效;意味着在一些更高的Qt版本中可能有其它方式替换了该模块。
2.此方式加载的网页在第一次启动时会很缓慢,考虑用户体验等情况,该方式不能作为首选。
3.QWebEngineView加载网页
4.QDesktopServices启动默认浏览器
QDesktopServices::openUrl(QUrl::fromUserInput("http://www.baidu.com"));
注:
1.此方式只能启动Windows系统下设定的默认浏览器,并不能将该网页嵌入到Qt程序中。
2.加载网页的速度快于Qt自己封装的网页加载模块。
5.采用windows的API来启动一个程序
ShellExecute(handle,'open', 'http://www.neu.edu.cn', nil, nil, SW_SHOWNORMAL); //打开一个网页
ShellExecute(Handle,'open','Explorer.exe',PChar(FOpenFolderName),nil,1) ; //打开一个文件或程序
handle: 指定显示位置的父窗口
operation: 打开方式,参数设为nil 时默认为open , 表示打开由filename 指定的 程序 或者 文件 和文件夹
print 表示打印由filename 指定的文件
explore 浏览由filename 指定的文件夹
filename: 指定要操作的 可执行文件名 和 普通文件 和 文件夹 // 为文件或文件夹必须要有完整的路径
Dir: 当filename 为可执行文件时,指定要操作的路径
prameter: 若filename 为可执行文件 则 指定其命令参数,若无则为 nil
showcmd: 1 表示以最大话或最小化 方式显示
6.采用QProcess 来嵌入外部应用程序
==注:==如果采用此方法嵌入的外部程序,无法处理键盘的输入或鼠标操作等事件,可以采用以下方法来解决:
#include<windows.h>
#include<QWindow>
void AttachWinThreadKeyMouseEvent(WId remoteHandle)
{
DWORD curThreadId = GetCurrentThreadId(); //获取当前线程的ID
DWORD remoteThreadId = GetWindowThreadProcessId((HWND)remoteThreadId,NULL); //获取要加入到当前线程的外部线程ID
if (curThreadId != remoteThreadId)
{
if (!AttachThreadInput(remoteThreadId, curThreadId, true))
{
qErrnoWarning("AttachThreadInput:Error");
}
}
}
7.miniblink加载网页
…