《QT实用小工具·十一》Echart图表JS交互之仪表盘

1、概述
源码放在文章末尾

该项目为Echart图表JS交互之炫酷的仪表盘,可以用鼠标实时改变仪表盘的读数。

下面为demo演示:

该项目部分代码如下:

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include "qurl.h"

#ifdef webkit
#include <QtWebKit>
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
#include <QtWebKitWidgets>
#endif
#elif webengine
#include <QtWebEngineWidgets>
#endif

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->initForm();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::initForm()
{
    //初始化浏览器控件属性,一个项目中只需要设置一次就行
#ifdef webkit
    QWebSettings *webSetting = QWebSettings::globalSettings();
    webSetting->setAttribute(QWebSettings::JavascriptEnabled, true);
    webSetting->setAttribute(QWebSettings::PluginsEnabled, true);
    webSetting->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
#elif webengine
    QWebEngineSettings *webSetting = QWebEngineProfile::defaultProfile()->settings();
    webSetting->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
    webSetting->setAttribute(QWebEngineSettings::PluginsEnabled, true);
    webSetting->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
#endif

    //实例化多个浏览器控件,设置背景透明
#ifdef webkit
    for (int i = 0; i < 4; ++i) {
        QWebView *webView = new QWebView;
        webView->setStyleSheet(QString("background:%1;").arg("rgba(255,0,0,0)"));
        webViews << webView;
    }
#elif webengine
    for (int i = 0; i < 4; ++i) {
        QWebEngineView *webView = new QWebEngineView;
        webView->page()->setBackgroundColor(Qt::transparent);
        webViews << webView;
    }
#endif

    //添加到布局
#if (defined webkit) || (defined webengine)
    ui->gridLayout->addWidget(webViews.at(0), 0, 0);
    ui->gridLayout->addWidget(webViews.at(1), 0, 1);
    ui->gridLayout->addWidget(webViews.at(2), 1, 0);
    ui->gridLayout->addWidget(webViews.at(3), 1, 1);
#endif

    //加载html文件
    QUrl url("file:///" + qApp->applicationDirPath() + "/gauge.html");
#ifdef webkit
    foreach (QWebView *webView, webViews) {
        webView->load(url);
    }
#elif webengine
    foreach (QWebEngineView *webView, webViews) {
        webView->load(url);
    }
#endif
}

void Widget::on_horizontalSlider_valueChanged(int value)
{
    //执行js函数
    QString js = QString("setGaugeValue(%1)").arg(value);
#ifdef webkit
    foreach (QWebView *webView, webViews) {
        webView->page()->mainFrame()->evaluateJavaScript(js);
    }
#elif webengine
    foreach (QWebEngineView *webView, webViews) {
        webView->page()->runJavaScript(js);
    }
#endif
}

源码下载

相关推荐
风逸hhh几秒前
python打卡day58@浙大疏锦行
开发语言·python
Q_9709563913 分钟前
java+vue+SpringBoo足球社区管理系统(程序+数据库+报告+部署教程+答辩指导)
java·开发语言·数据库
傅里叶的耶16 分钟前
C++系列(二):告别低效循环!选择、循环、跳转原理与优化实战全解析
c++·visual studio
Vitta_U32 分钟前
MFC的List Control自适应主界面大小
c++·list·mfc
为了更好的明天而战37 分钟前
Java 中的 ArrayList 和 LinkedList 区别详解(源码级理解)
java·开发语言
just小千1 小时前
重学React(二):添加交互
javascript·react.js·交互
JosieBook1 小时前
【Java编程动手学】Java中的数组与集合
java·开发语言·python
qq_589568101 小时前
element-plus按需自动导入的配置 以及icon图标不显示的问题解决
开发语言·javascript·ecmascript
lsx2024061 小时前
SQLite Select 语句详解
开发语言
Dovis(誓平步青云)1 小时前
基于探索C++特殊容器类型:容器适配器+底层实现原理
开发语言·c++·queue·适配器·stack