新增miniblink示例

master
feiyangqingyun 2021-01-16 11:41:04 +08:00
parent 850beb88f6
commit aeb2d0c1eb
17 changed files with 1926 additions and 11 deletions

BIN
0snap/miniblink.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -45,6 +45,7 @@
| 38 | designer | QtDesigner4源码 | | 38 | designer | QtDesigner4源码 |
| 39 | netserver | 网络中转服务器 | | 39 | netserver | 网络中转服务器 |
| 40 | mpvdemo | 视频流播放mpv内核 | | 40 | mpvdemo | 视频流播放mpv内核 |
| 41 | miniblink | miniblink示例 |
### 二、学习群 ### 二、学习群
1. **Qt交流大会群 853086607(雨田哥)** 1. **Qt交流大会群 853086607(雨田哥)**
@ -92,4 +93,5 @@
![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/key.png) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/key.png)
![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/live.png) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/live.png)
![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/netserver.jpg) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/netserver.jpg)
![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/designer.png) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/designer.png)
![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/miniblink.jpg)

18
miniblink/file/demo.html Normal file
View File

@ -0,0 +1,18 @@
<html>
<head>
<script>
function onClicked() {
//alert('hello');
document.getElementById('label').innerHTML = '确实不错哦';
objName_receiveData('type','data');
}
</script>
</head>
<body>
<h1>Hello World</h1>
<p>Hello World</p>
<label id='label'>今天天气真棒</label>
<input type="button" value="发送数据给Qt" onclick="onClicked()" />
</body>
</html>

32
miniblink/file/echarts.min.js vendored Normal file

File diff suppressed because one or more lines are too long

38
miniblink/file/gauge.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
<script src="echarts.min.js"></script>
</head>
<body>
<div id="main" style="height:500px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
function setGaugeValue(value){
var option = {
tooltip : {
formatter: "{a} <br/>{b} : {c}%"
},
toolbox: {
feature: {
restore: {},
saveAsImage: {}
}
},
series: [
{
name: '业务指标',
type: 'gauge',
detail: {formatter:'{value}%'},
data: [{value: value, name: '完成率'}]
}
]
};
myChart.setOption(option);
}
window.onresize = myChart.resize;
setGaugeValue(68);
</script>
</body>
</html>

10
miniblink/main.cpp Normal file
View File

@ -0,0 +1,10 @@
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}

14
miniblink/miniblink.pro Normal file
View File

@ -0,0 +1,14 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = miniblink
TEMPLATE= app
DESTDIR = $$PWD/../bin
CONFIG += warn_off
HEADERS += widget.h
SOURCES += main.cpp widget.cpp
FORMS += widget.ui
INCLUDEPATH += $$PWD/miniblink
include ($$PWD/miniblink/miniblink.pri)

View File

@ -0,0 +1,107 @@
#include "miniblink.h"
#include "qapplication.h"
#include "qdebug.h"
void onLoadingFinish(wkeWebView, void *param, const wkeString, wkeLoadingResult result, const wkeString)
{
//qDebug() << "onLoadingFinish" << result;
//在注册函数的地方就已经传入了类指针
miniblink *widget = (miniblink *)param;
//0 = WKE_LOADING_SUCCEEDED, 1 = WKE_LOADING_FAILED, 2 = WKE_LOADING_CANCELED
widget->loadFinish(result == 0);
}
jsValue WKE_CALL_TYPE objName_receiveData(jsExecState es, void *param)
{
if (0 == jsArgCount(es)) {
return jsUndefined();
}
//挨个取出参数,设定的通用方法,只有两个参数
jsValue arg0 = jsArg(es, 0);
jsValue arg1 = jsArg(es, 1);
if (!jsIsString(arg0)) {
return jsUndefined();
}
//在注册函数的地方就已经传入了类指针
miniblink *widget = (miniblink *)param;
QString type = QString::fromStdString(jsToString(es, arg0));
QVariant data = QString::fromStdString(jsToString(es, arg1));
widget->receiveData(type, data);
return jsUndefined();
}
miniblink::miniblink(QWidget *parent) : QWidget(parent)
{
//第一步先初始化动态库
init();
//第二步初始化浏览器控件
//创建一个浏览器控件,放入句柄
webView = wkeCreateWebWindow(WKE_WINDOW_TYPE_CONTROL, (HWND)this->winId(), 0, 0, this->width(), this->height());
//关联完成信号
wkeOnLoadingFinish(webView, onLoadingFinish, this);
//设置浏览器控件可见
wkeShowWindow(webView, TRUE);
//注册通用的接收数据的方法,一定要放在这里在网页加载前执行
wkeJsBindFunction("objName_receiveData", objName_receiveData, this, 2);
}
void miniblink::init()
{
//全局只需要初始化一次
static bool isInit = false;
if (!isInit) {
isInit = true;
//不同的构建套件位数加载不同的动态库
#ifdef Q_OS_WIN64
QString file = qApp->applicationDirPath() + "/miniblink_64.dll";
#else
QString file = qApp->applicationDirPath() + "/miniblink.dll";
#endif
const wchar_t *path = reinterpret_cast<const wchar_t *>(file.utf16());
wkeSetWkeDllPath(path);
bool ok = wkeInitialize();
qDebug() << QString("init miniblink %1").arg(ok ? "ok" : "error");
}
}
void miniblink::release()
{
wkeFinalize();
}
void miniblink::resizeEvent(QResizeEvent *)
{
wkeResize(webView, this->width(), this->height());
}
void miniblink::loadFinish(bool ok)
{
emit loadFinished(ok);
}
void miniblink::receiveData(const QString &type, const QVariant &data)
{
emit receiveDataFromJs(type, data);
}
void miniblink::load(const QString &url, bool file)
{
const char *temp = url.toLocal8Bit().data();
if (file) {
wkeLoadFile(webView, temp);
} else {
wkeLoadURL(webView, temp);
}
}
void miniblink::setHtml(const QString &html, const QString &baseUrl)
{
wkeLoadHtmlWithBaseUrl(webView, html.toLocal8Bit().data(), baseUrl.toLocal8Bit().data());
}
void miniblink::runJs(const QString &js)
{
wkeRunJS(webView, js.toLocal8Bit().data());
}

View File

@ -0,0 +1,46 @@
#ifndef MINIBLINK_H
#define MINIBLINK_H
#include <QWidget>
#include "wke.h"
class miniblink : public QWidget
{
Q_OBJECT
public:
explicit miniblink(QWidget *parent = 0);
//初始化资源
static void init();
//释放资源
static void release();
protected:
//设置浏览器控件自动适应大小
void resizeEvent(QResizeEvent *);
private:
//浏览器控件对象
wkeWebView webView;
signals:
//网页载入完成
void loadFinished(bool ok);
//收到网页发出来的数据
void receiveDataFromJs(const QString &type, const QVariant &data);
public:
//给回调用的函数
void loadFinish(bool ok);
void receiveData(const QString &type, const QVariant &data);
public slots:
//加载网址或者本地文件
void load(const QString &url, bool file = false);
//加载html内容
void setHtml(const QString &html, const QString &baseUrl);
//执行js函数
void runJs(const QString &js);
};
#endif // MINIBLINK_H

View File

@ -0,0 +1,3 @@
HEADERS += $$PWD/wke.h
HEADERS += $$PWD/miniblink.h
SOURCES += $$PWD/miniblink.cpp

1439
miniblink/miniblink/wke.h Normal file

File diff suppressed because it is too large Load Diff

12
miniblink/readme.md Normal file
View File

@ -0,0 +1,12 @@
### 特别说明
1. 编译后记得将file目录和对应dll目录下的所有文件拷贝到可执行文件同一目录。
2. 动态库地址:[https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA](https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA) 提取码: ujm7
3. 收费增强版:[https://qtchina.blog.csdn.net/article/details/104005917](https://qtchina.blog.csdn.net/article/details/104005917)
4. miniblink只支持windows。
### 其他说明
1. 作品大全:[https://qtchina.blog.csdn.net/article/details/97565652](https://qtchina.blog.csdn.net/article/details/97565652)
2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
4. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)
5. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

65
miniblink/widget.cpp Normal file
View File

@ -0,0 +1,65 @@
#include "widget.h"
#include "ui_widget.h"
#include "qapplication.h"
#include "qdebug.h"
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
this->initForm();
on_btnLoadFile_clicked();
}
Widget::~Widget()
{
delete ui;
}
void Widget::initForm()
{
webView = new miniblink;
connect(webView, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
connect(webView, SIGNAL(receiveDataFromJs(QString, QVariant)),
this, SLOT(receiveDataFromJs(QString, QVariant)));
ui->gridLayout->addWidget(webView, 0, 0);
}
void Widget::loadFinished(bool ok)
{
qDebug() << "加载完成" << ok;
}
void Widget::receiveDataFromJs(const QString &type, const QVariant &data)
{
qDebug() << "收到数据" << type << data;
}
void Widget::on_btnLoadUrl_clicked()
{
webView->load("https://www.baidu.com");
}
void Widget::on_btnLoadFile_clicked()
{
webView->load(qApp->applicationDirPath() + "/demo.html", true);
}
void Widget::on_btnLoadHtml_clicked()
{
QStringList html;
html << "<html><body>";
html << "<h2>Hello World</h2>";
html << "</body></html>";
webView->setHtml(html.join(""), "");
}
void Widget::on_btnRunJs_clicked()
{
webView->load(qApp->applicationDirPath() + "/gauge.html", true);
}
void Widget::on_horizontalSlider_valueChanged(int value)
{
QString js = QString("setGaugeValue(%1)").arg(value);
webView->runJs(js);
}

38
miniblink/widget.h Normal file
View File

@ -0,0 +1,38 @@
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "miniblink.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
miniblink *webView;
private slots:
void initForm();
//网页载入完成
void loadFinished(bool ok);
//收到网页发出来的数据
void receiveDataFromJs(const QString &type, const QVariant &data);
private slots:
void on_btnLoadUrl_clicked();
void on_btnLoadFile_clicked();
void on_btnLoadHtml_clicked();
void on_btnRunJs_clicked();
void on_horizontalSlider_valueChanged(int value);
};
#endif // WIDGET_H

91
miniblink/widget.ui Normal file
View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>miniblink使用示例</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>3</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="btnLoadUrl">
<property name="text">
<string>加载网页</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnLoadFile">
<property name="text">
<string>加载文件</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnLoadHtml">
<property name="text">
<string>加载内容</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnRunJs">
<property name="text">
<string>执行JS</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="horizontalSlider">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>68</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

View File

@ -1,9 +1,9 @@
编译完成以后记得将dll文件复制到可执行文件同一目录。 ### 特别说明
1. 编译完成以后记得将dll文件复制到可执行文件同一目录。
对应各个版本的dll文件下载地址https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7 2. 动态库地址:[https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA](https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA) 提取码: ujm7
3. 收费增强版:[https://qtchina.blog.csdn.net/article/details/107972067](https://qtchina.blog.csdn.net/article/details/107972067)
收费增强版本:[https://qtchina.blog.csdn.net/article/details/107972067](https://qtchina.blog.csdn.net/article/details/107972067)
### 其他说明
1. 作品大全:[https://qtchina.blog.csdn.net/article/details/97565652](https://qtchina.blog.csdn.net/article/details/97565652) 1. 作品大全:[https://qtchina.blog.csdn.net/article/details/97565652](https://qtchina.blog.csdn.net/article/details/97565652)
2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun) 2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun) 3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)

View File

@ -1,9 +1,9 @@
编译完成以后记得将dll文件复制到可执行文件同一目录。 ### 特别说明
1. 编译完成以后记得将dll文件复制到可执行文件同一目录。
对应各个版本的dll文件下载地址https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7 2. 动态库地址:[https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA](https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA) 提取码: ujm7
3. 收费增强版:[https://qtchina.blog.csdn.net/article/details/103946067](https://qtchina.blog.csdn.net/article/details/103946067)
收费增强版本:[https://qtchina.blog.csdn.net/article/details/103946067](https://qtchina.blog.csdn.net/article/details/103946067)
### 其他说明
1. 作品大全:[https://qtchina.blog.csdn.net/article/details/97565652](https://qtchina.blog.csdn.net/article/details/97565652) 1. 作品大全:[https://qtchina.blog.csdn.net/article/details/97565652](https://qtchina.blog.csdn.net/article/details/97565652)
2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun) 2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun) 3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)