qt中使用miniblink总结

由于项目需要,一直使用qt5.7.0这个版本,但是这个版本携带的webwidget不支持vue等项目的运行,可能chrom内核版本太旧

于是就查找了一下开源项目,发现了miniblink这个东西,引用也非常方面,今天使用了一下,现在做一个总结

github上下载sdk,解压出来里面有两个文件有用

把wke.h复制到工程目录下,把node.dll复制到运行目录下 ,接下来新建一个qt的gui项目,main函数中这样写

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    wkeSetWkeDllPath(L"node.dll");
    wkeInitialize();
    MainWindow w;
    w.show();
    int ret=a.exec();
    wkeFinalize();
    return ret;
}

接下来新建一个包装控件 类

#ifndef WEBWIDGET_H
#define WEBWIDGET_H

#include <QWidget>
#include <QResizeEvent>
#include "wke.h"
class WebWidget : public QWidget
{
    Q_OBJECT
public:
    explicit WebWidget(const QString& url="",QWidget *parent = 0);
    ~WebWidget();
    wkeWebView webView;
    void loadUrl(QString& url);
    void resizeEvent(QResizeEvent *event);
    void onMove();
signals:

public slots:
};

#endif // WEBWIDGET_H

#include "webwidget.h"
#include <QHBoxLayout>
#include <QDebug>
WebWidget::WebWidget(const QString& url,QWidget *parent) : QWidget(parent)
{
    webView= wkeCreateWebWindow(WKE_WINDOW_TYPE_TRANSPARENT, (HWND)this->winId(), 0, 0, this->width(),this->height());
    wkeShowWindow(webView, TRUE);
    wkeLoadURL(webView,url.toLocal8Bit().data());
}
WebWidget::~WebWidget()
{
    qDebug()<<"in del";
}
void WebWidget::loadUrl(QString& url)
{
    wkeLoadURL(webView,url.toLocal8Bit().data());
}
void WebWidget::resizeEvent(QResizeEvent *event)
{
    Q_UNUSED(event);
    wkeResize(webView, this->width(),this->height());
    QPoint pos=this->mapToGlobal(QPoint(0,0));
    wkeMoveWindow(webView,pos.x(),pos.y(),this->width(),this->height());
}
void WebWidget::onMove()
{
    QPoint pos=this->mapToGlobal(QPoint(0,0));
    wkeMoveWindow(webView,pos.x(),pos.y(),this->width(),this->height());
}

使用的时候大概这样

    webWidget=new WebWidget(Setting::get("url"));
    ui->content->layout()->addWidget(webWidget);

运行截图如下

可以使用Miniblink的Web控件来加载百度离线地图,以下是示例代码: ```c++ #include <QtWidgets/QApplication> #include <QtWidgets/QMainWindow> #include <qt_windows.h> #include <Miniblink.h> #pragma comment(lib, "Miniblink.lib") class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { QWidget* centralWidget = new QWidget(this); QVBoxLayout* layout = new QVBoxLayout(centralWidget); layout->setMargin(0); layout->setSpacing(0); this->setCentralWidget(centralWidget); m_webView = mbCreateWebView(MB_WINDOW_TYPE_POPUP, centralWidget, 0, 0, 800, 600); mbSetHandle(m_webView, reinterpret_cast<void*>(centralWidget->winId())); mbLoadHtml(m_webView, "<html><body><div id='map' style='width:800px;height:600px;'></div><script type='text/javascript' src='http://api.map.baidu.com/getscript?v=2.0&ak=your_ak'></script><script type='text/javascript'>var map = new BMap.Map('map');map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);</script></body></html>", "http://localhost"); layout->addWidget(reinterpret_cast<QWidget*>(m_webView)); } ~MainWindow() { mbDestroyWebView(m_webView); } private: MbWebView* m_webView; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); mbInit(); MainWindow w; w.show(); int ret = a.exec(); mbUninit(); return ret; } #include "main.moc" ``` 其,`MB_WINDOW_TYPE_POPUP`参数表示创建一个弹出式窗口,`mbSetHandle`函数用于设置Web控件的Win32句柄,`mbLoadHtml`函数用于加载百度离线地图的HTML代码,需要将`your_ak`替换为自己申请的百度地图AK。 注意:需要在Qt的.pro文件添加以下内容: ```qmake LIBS += -L"path/to/Miniblink/lib" -lMiniblink INCLUDEPATH += "path/to/Miniblink/include" ``` 其,`path/to`需要替换为实际的Miniblink库文件和头文件的路径。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值