QT QWebEngineView+UEditor富文本编辑器

一、简述

记--简单使用QWebEngineView+UEditor富文本编辑器实现一个简单的编辑器,支持图片(支持右键粘贴,支持直接拖拽图片添加),支持GIF,支持表格等功能。

例子打包:外链:https://wwkw.lanzouf.com/b0cbjaeeb 密码:e22f

ueditor官网:https://github.com/fex-team/ueditor

二、效果

三、工程结构

项目使用到了 QWebEngineView,目前MSVC版本的Qt才默认带有该组件,因此需要支持MSVC版本的QT

详细待补充

四、源文件

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QWebEngineView>
#include <QWebChannel>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void SetContent(QString text);QString GetContent();signals:void SignalRunJsOver();public slots: //html会发送消息,这里接收处理void RecieveJsMessage(const QString& jsBase64Msg, const QString& jsMsg);private:Ui::MainWindow *ui;QWebEngineView *m_webView;QWebChannel *m_pWebChannel;
};#endif // MAINWINDOW_H

mainwindow.cpp文件

#pragma execution_character_set("utf-8")
#include <QWebEngineSettings>
#include <QTime>
#include <QTimer>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QEventLoop>
#include "mainwindow.h"
#include "ui_mainwindow.h"// 休眠延时,
void SleepMs(int msec)
{QTime dieTime = QTime::currentTime().addMSecs(msec);while( QTime::currentTime() < dieTime )QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_webView = new QWebEngineView(this);m_pWebChannel = new QWebChannel(this);QWebEngineSettings *webSetting = QWebEngineSettings::globalSettings();webSetting->setAttribute(QWebEngineSettings::JavascriptEnabled, true);webSetting->setAttribute(QWebEngineSettings::PluginsEnabled, true);webSetting->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);m_webView->load(QUrl("qrc:/edit/_examples/completeDemo.html"));//设置主页面// 注册一个qtui对象  html端通过此名称向qt端发送消息m_pWebChannel->registerObject(QString("qtui"), this);m_webView->page()->setWebChannel(m_pWebChannel);// 测试QTimer::singleShot(200, this, [&](){setFocus();m_webView->setFocus();SetContent("hello"); // 测试设置编辑器内容QTimer::singleShot(3000, this, [&](){GetContent(); // 测试获取编辑器内容});});setCentralWidget(m_webView);
}MainWindow::~MainWindow()
{//m_pWebChannel->deregisterObject(this);delete m_webView;delete m_pWebChannel;delete ui;
}//调用GetContent()获取编辑器内容,编辑器js会发送相关信号,从而调用该函数,
void MainWindow::RecieveJsMessage(const QString &jsBase64Msg, const QString &jsMsg)
{Q_UNUSED(jsBase64Msg);QMessageBox::information(this, tr("内容"), jsMsg);
}// 设置编辑器内容
void MainWindow::SetContent(QString text)
{static bool tmp_fix_flag = true;// SetHtml()是主页面的一个js函数QString jsStr = QString(QString("SetHtml('%1')").arg(text));if (tmp_fix_flag) {//第一次加载网页有点慢, js还没有加载完成, SetHtml()找不到, 这里临时处理,后续优化SleepMs(2000);tmp_fix_flag = false;}m_webView->page()->runJavaScript(jsStr);
}//在编辑器可见时调用该函数其实就是保存内容
QString MainWindow::GetContent()
{if (!m_webView->isVisible())return "";QEventLoop loop;connect(this, &MainWindow::SignalRunJsOver, &loop, &QEventLoop::quit);QString jsStr = "GetHtml();";// GetHtml()是主页面的一个js函数QString retStr; // 返回值// 通过loop循环等到回调上来数据再继续m_webView->page()->runJavaScript(jsStr, [&](const QVariant &v){Q_UNUSED(v);// 在头文件中定义这个函数,收到js的回调返回值后,结束loop循环emit SignalRunJsOver();});loop.exec(); // 收不到回调处理结束信号,我就在这里循环等待return retStr;
}

五、总结

搭配Sqlite数据库可以做一个本地个人笔记软件,博客软件之类的, 可以记录生活的点滴,工作笔记等。

QT QWebEngineView+UEditor富文本编辑器相关推荐

  1. Ueditor富文本编辑器

    Ueditor富文本编辑器 Ueditor富文本编辑器插件应用步骤如下: 1.引入css和js文件 2.设置承载标签 设置富文本编辑器的承载标签,必须设置id属性.一般使用textarea或scrip ...

  2. ueditor富文本编辑器过滤了代码,如何取消?

    后台UEditor富文本编辑器,编辑的代码被强制过滤,并被强制修改成<p>标签?导致前台页面效果不对? ueditor富文本编辑器,虽然好用,但是很多时候,如果没有足够的使用经验,一般是很 ...

  3. java 接收前台富文本_前后端分离ueditor富文本编辑器的使用-Java版本

    最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多j ...

  4. MVC 使用 Ueditor富文本编辑器

    一.Ueditor 1.下载Ueditor富文本编辑器 官方下载地址: http://ueditor.baidu.com/website/download.html 建议下载开发版,此处我下载的是 . ...

  5. java 百度副文本_spring boot 、springMVC环境集成百度ueditor富文本编辑器

    spring-boot-mvc-ueditor-qiniu spring boot .springMVC环境集成百度ueditor富文本编辑器,使用七牛云存储图片 依赖库版本: spring boot ...

  6. php引入百度Ueditor富文本编辑器

    php引入百度Ueditor富文本编辑器 文本编辑器插件内容丰富,比起传统的textarea标签输入要好用很多,看看如何在页面实现引入吧 1.下载适合的资源包(可以去官网下载适合的版本),我是php引 ...

  7. ueditor富文本编辑器使用百度地图自定义动态地图组件及兼容https及http协议

    ueditor富文本编辑器默认支持百度地图组件,但是如果导入动态地图后会加很多默认的地图组件在上面.如果需要自定义动态地图的组件则需要修改ueditor特定的html. ueditor百度地图组件所在 ...

  8. UEditor富文本编辑器不显示问题

    项目场景: vue中if判断后使用文本编辑器(误区) 问题描述: 在div中使用v-if判断是否显示UEditor富文本编辑器,在判断为true的情况下富文本编辑器并未加载出. <!-- 判断富 ...

  9. UEditor 富文本编辑器-后端实现文件上传功能

    一.背景 前端使用 UEditor 富文本编辑器,前后端分离情况下,需要后端提供一个接口实现文件上传功能 本文根据文章:vue+Ueditor集成 [前后端分离项目][图片.文件上传][富文本编辑] ...

最新文章

  1. 三十五、字符串匹配问题--KMP算法
  2. haproxy参数优化
  3. Xamarin XAML语言教程通过数据绑定使用Progress属性
  4. 透过散射薄膜成像方案整理
  5. java json帮助类_java 写一个JSON解析的工具类
  6. 机器学习 深度学习 ai_如何突破AI炒作成为机器学习工程师
  7. 计算机的代表性产品,电脑展回顾 十款最具代表性存储产品
  8. hsv封装好的调试工具类
  9. Forms Authentication With Absolute Return URLs
  10. 百度地图城市代码CityID
  11. Java截取视频某一帧
  12. 7、python数据框重复值的查找和删除
  13. Linux网络编程 ——Select机制
  14. 逻辑回归实现文本分类
  15. Python可视化打包神器,绝了!
  16. 视觉问答学习(一)——视觉问答的动态记忆网络DMN+(tensorflow实现)
  17. C语言源代码系列-管理系统之会员计费系统
  18. js实现排行榜(根据我微信小程序项目所分享)完整版
  19. 蓝桥杯备赛(五) 双指针,BFS与图论
  20. 阿里云盘最新邀请码,某度颤抖吧(持续更新中~)

热门文章

  1. Tableau用多线图展示多个指标
  2. 【广搜】Cyh和香穗子
  3. 爆料 | 解析阿里妈妈如何将深度学习应用在广告、推荐及搜索业务
  4. 【软件工程实践】Hive研究-Blog10
  5. 获取网页链接,比正则表达式更灵活更大众化.
  6. P1071 [NOIP2009 提高组] 潜伏者
  7. 如何宣传推广自己的博客啊?
  8. java实现floyd统计天津地铁的网站距离
  9. 新年将至,如何用python给朋友送上新年祝福呢?
  10. 10. 哈夫曼树、Trie、补充