QT QWebEngineView+UEditor富文本编辑器
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富文本编辑器相关推荐
- Ueditor富文本编辑器
Ueditor富文本编辑器 Ueditor富文本编辑器插件应用步骤如下: 1.引入css和js文件 2.设置承载标签 设置富文本编辑器的承载标签,必须设置id属性.一般使用textarea或scrip ...
- ueditor富文本编辑器过滤了代码,如何取消?
后台UEditor富文本编辑器,编辑的代码被强制过滤,并被强制修改成<p>标签?导致前台页面效果不对? ueditor富文本编辑器,虽然好用,但是很多时候,如果没有足够的使用经验,一般是很 ...
- java 接收前台富文本_前后端分离ueditor富文本编辑器的使用-Java版本
最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多j ...
- MVC 使用 Ueditor富文本编辑器
一.Ueditor 1.下载Ueditor富文本编辑器 官方下载地址: http://ueditor.baidu.com/website/download.html 建议下载开发版,此处我下载的是 . ...
- java 百度副文本_spring boot 、springMVC环境集成百度ueditor富文本编辑器
spring-boot-mvc-ueditor-qiniu spring boot .springMVC环境集成百度ueditor富文本编辑器,使用七牛云存储图片 依赖库版本: spring boot ...
- php引入百度Ueditor富文本编辑器
php引入百度Ueditor富文本编辑器 文本编辑器插件内容丰富,比起传统的textarea标签输入要好用很多,看看如何在页面实现引入吧 1.下载适合的资源包(可以去官网下载适合的版本),我是php引 ...
- ueditor富文本编辑器使用百度地图自定义动态地图组件及兼容https及http协议
ueditor富文本编辑器默认支持百度地图组件,但是如果导入动态地图后会加很多默认的地图组件在上面.如果需要自定义动态地图的组件则需要修改ueditor特定的html. ueditor百度地图组件所在 ...
- UEditor富文本编辑器不显示问题
项目场景: vue中if判断后使用文本编辑器(误区) 问题描述: 在div中使用v-if判断是否显示UEditor富文本编辑器,在判断为true的情况下富文本编辑器并未加载出. <!-- 判断富 ...
- UEditor 富文本编辑器-后端实现文件上传功能
一.背景 前端使用 UEditor 富文本编辑器,前后端分离情况下,需要后端提供一个接口实现文件上传功能 本文根据文章:vue+Ueditor集成 [前后端分离项目][图片.文件上传][富文本编辑] ...
最新文章
- 三十五、字符串匹配问题--KMP算法
- haproxy参数优化
- Xamarin XAML语言教程通过数据绑定使用Progress属性
- 透过散射薄膜成像方案整理
- java json帮助类_java 写一个JSON解析的工具类
- 机器学习 深度学习 ai_如何突破AI炒作成为机器学习工程师
- 计算机的代表性产品,电脑展回顾 十款最具代表性存储产品
- hsv封装好的调试工具类
- Forms Authentication With Absolute Return URLs
- 百度地图城市代码CityID
- Java截取视频某一帧
- 7、python数据框重复值的查找和删除
- Linux网络编程 ——Select机制
- 逻辑回归实现文本分类
- Python可视化打包神器,绝了!
- 视觉问答学习(一)——视觉问答的动态记忆网络DMN+(tensorflow实现)
- C语言源代码系列-管理系统之会员计费系统
- js实现排行榜(根据我微信小程序项目所分享)完整版
- 蓝桥杯备赛(五) 双指针,BFS与图论
- 阿里云盘最新邀请码,某度颤抖吧(持续更新中~)