基于Qt WebChannel的前端UI桌面混合应用

这篇具有很好参考价值的文章主要介绍了基于Qt WebChannel的前端UI桌面混合应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、Qt模块

本文使用Qt 5.15 LTS版本,开发环境:Windows + MSVC 2019 32-bit,其它平台参考Platform Notes。

  • Qt WebEngine
    该模块主要提供一个基于Chromium的跨平台浏览器引擎。

  • Qt WebChannel
    该模块提供的js库可以无缝访问C++或QML注册的序列化对象。


二、开发实例

工程目录树:
demo
├── core.h
├── demoassets.pri
├── demo.pro
├── index.html
├── main.cpp
└── qwebchannel.js

1. 创建工程

本文使用空白工程,逐步添加文件,最终的工程文件如下:

# demo.pro
TEMPLATE = app
TARGET = demo

QT += core webenginewidgets webchannel

HEADERS += core.h
SOURCES += main.cpp
DISTFILES += demoassets.pri index.html qwebchannel.js

include(./demoassets.pri)
INSTALLS += target

2. 资源拷贝

# demoassets.pri
# 添加前端资源文件
jslib = $$PWD/qwebchannel.js
pages = $$PWD/index.html

demoassets.files += $$jslib
demoassets.files += $$pages

INSTALLS += demoassets

assetcopy.files += $$jslib
assetcopy.files += $$pages

CONFIG(debug, debug|release){
    assetcopy.path = $${OUT_PWD}/debug
}

CONFIG(release, debug|release){
    assetcopy.path = $${OUT_PWD}/release
}

COPIES += assetcopy

3. 主应用

#include "core.h"

#include <QApplication>
#include <QWebChannel>
#include <QWebEngineView>


int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    // 注册对象
    Core* core = new Core();
    QWebChannel* channel = new QWebChannel();
    channel->registerObject(QStringLiteral("core"), core);

    // 加载主页
    QString homePage = QCoreApplication::applicationDirPath() + "/index.html";
    QWebEngineView *view = new QWebEngineView();
    view->page()->setWebChannel(channel);
    view->load(QUrl::fromLocalFile(homePage));
    view->show();

    return app.exec();
}

4. 工程方法

#ifndef CORE_H
#define CORE_H

#include <QObject>
#include <QMessageBox>

class Core: public QObject
{
    Q_OBJECT
public:
    Core(QObject *parent = nullptr): QObject(parent)
    {
    }
signals:
    void send(const QString &text);

public slots:
    void receive(const QString &text)
    {
        // receive from JS
        QMessageBox::information(NULL, "receive", text, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        // send to JS
        emit send(text);
    }
};
#endif // CORE_H

5. 前端页面

注:文章来源地址https://www.toymoban.com/news/detail-656216.html

  1. 演示通过CDN引入Vue,实际可自行选择,关键部分为new QWebChannel
  2. qwebchannel.js为官方提供,可在Qt WebChannel Standalone Example查看
<html>
    <head>
        <meta charset="UTF-8" />
        <!-- Qt webChannel -->
        <script type="text/javascript" src="./qwebchannel.js"></script>
        <!-- Vue -->
        <script src="https://unpkg.com/vue@3.2.45/dist/vue.global.js"></script>
    </head>

    <body>
        <div id="app">
            <div style="width: 300px;">
                <span>来自Qt</span><br>
                <input v-model="textarea"/>
                <br>
                <span>发到Qt</span><br>
                <input v-model="message" placeholder="请输入" /><br>
                <button @click='sendToQt'>Send</button>
            </div>
        </div>

        <script>
            Vue.createApp({
                data() {
                    return {
                        message: '',
                        textarea: ''
                    }
                },
                methods: {
                    sendToQt() {
                        console.log('to Qt' + this.message);
                        window.core.receive(this.message);
                    }
                },
                mounted() {
                    that = this;
                    new QWebChannel(qt.webChannelTransport, function(channel) {
                        // 挂载全局对象
                        window.core = channel.objects.core;
                        // 接收Qt发送信号
                        core.send.connect(function(text) {
                            console.log('from Qt' + text);
                            that.textarea = text;
                        });
                    });
                }
            }).mount("#app");
        </script>
    </body>
</html>

三、总结

  • 通过WebEngine和WebChannel实现前端js和Qt C++的交互,进而由Qt调用C++本地方法来处理系统或平台相关的业务功能,完成一个前后端的高度集成。
  • Qt本身自带强大的功能,开发人员根据产品特点设计合适的业务架构,如插件化、模块化的架构,即可实现一个产品模型。

到了这里,关于基于Qt WebChannel的前端UI桌面混合应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6和Rust结合构建桌面应用

    桌面应用程序是原生的、快速的、安全的,并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言,专注于安全性和性能,解决了 C/C++ 长期以来一直在努力解决的问题,例如内存错误和构建并发程序。 在桌面应用程序开发中使用的所有编程语言中,R

    2024年02月11日
    浏览(36)
  • Qt实现一个简单的应用程序——桌面助手

    1、实现不同功能之间的界面切换 2、可查看日历 3、可实现计时器功能 4、可实现计算器功能 5、ui界面及按钮部件背景的设置 6、为软件设置图标 7、程序打包成软件       1、创建工程         New Project - Application - Qt Widgets Application然后下一步,使用ui界面文件能省去很多步骤

    2024年02月08日
    浏览(69)
  • CMake+QT+大漠插件的桌面应用开发

    在CMake+大漠插件的应用开发——处理dm.dll,免注册调用大漠插件中已经说明了如何免注册调用大漠插件,以及做了几个简单的功能调用(查找窗口、截图) 下面来利用 QT 和 大漠插件 做一个简单的窗口查找、截图的桌面工具应用,功能点如下 点击“注册”选项完成大漠插件

    2024年01月19日
    浏览(49)
  • windows桌面应用程序UI自动化工具

    WinApp(Windows APP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。 例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp,其扩展名基本都是*.exe,运行后也都会有一个漂亮、易用的UI界面,下面

    2024年02月11日
    浏览(49)
  • CMake+QT+大漠插件的桌面应用开发(QThread)

    在CMake+QT+大漠插件的桌面应用开发中已经给出了 QT 配合 大漠插件 开发桌面应用的样例 不过由于主窗口的UI操作和大漠的调用是在一个线程里面的,所以当大漠调用时间过长时会出现UI界面卡顿的现象 我们可以利用子线程处理耗时操作,处理完后再由主线程(UI线程)更新界

    2024年01月18日
    浏览(32)
  • vite + electron 构建前端桌面应用程序

    npm yarn 选择是否继续 项目名称 选择框架 选择项目语言 项目构建成功,根据提示进入项目目录,安装依赖 electron 官网:https://www.electronjs.org/zh/docs/latest/ vite-plugin-electron :https://github.com/electron-vite/vite-plugin-electron 安装依赖(electron 安装比较慢,耐心等待即可) 编写 Electron 入

    2024年02月06日
    浏览(52)
  • 飞腾架构麒麟V10桌面系统Qt应用程序打包

    前言 本文记录了在飞腾架构麒麟V10桌面系统中打包Qt应用程序及部署的一些注意事项。打包工具使用的是linuxdeployqt,在飞腾架构架构下没有现成的工具安装包,需要自行编译安装。 1. linuxdeployqt 首先下载linuxqtdeploy下载地址https://github.com/probonopd/linuxdeployqt 下载之后解压目录如

    2024年02月11日
    浏览(93)
  • 前端桌面应用开发实践:Electron入门指南

    随着互联网的快速发展,前端开发不再局限于网页应用,而是逐渐涉及到桌面应用的开发。Electron作为一种流行的前端桌面应用开发框架,为开发者提供了一种快速构建跨平台桌面应用的方式。本文将介绍Electron的基本概念和使用方法,并通过一个简单的示例来说明其开发实践

    2024年02月11日
    浏览(47)
  • Rust桌面应用开发工具-----Tauri(Yew UI 模版)安装与测试

    最近在学习rust,想要了解一下关于rust在桌面应用开发方面的工具。。。 已经安装好了Rust ,我的测试环境是在 macos 系统进行的。其他系统注意阅读官方的操作文档。 MacOs系统环境准备 关于C的开发依赖 更新一下rust 运行之后会有如下的一些提示 根据提示运行测试一下 有个报

    2024年02月16日
    浏览(42)
  • Web前端 3D开发入门规划 3D效果将不再是桌面应用的专利

    随着 WEB领域的快速发展 3D技术开始不再是桌面应用的专利 WEB3D技术的应用 实现了启用网址的3维呈现 让界面更直观 立体的展示 他打破了传统平面的展示形式 那么 目前的话 政府也有大量的新基建的项目 如 数字孪生 智慧城市 智慧园区 智慧工厂 智慧消费等等项目都涉及到了

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包