"

环球体育-【平台】拥有全球最顶尖的原生APP,每天为您提供千场精彩体育赛事,环球体育-【平台】更有真人、彩票、电子老虎机、真人电子竞技游戏等多种娱乐方式选择,环球体育-【平台】让您尽享娱乐、赛事投注等,且无后顾之忧!

"

Qt官方示例-Markdown編輯器

小編:啊南 64閱讀 2020.12.26

基于QWebEngineView與QWebChannel實現的Markdown編輯器。

0x00 原理

Markdown編輯器演示了如何使用QWebChannel和JavaScript庫為自定義標記語言提供富文本預覽工具。

Markdown是一種輕量級的標記語言,具有純文本格式語法??梢栽跒g覽器中查看時將內容呈現為富文本格式。

Markdown編輯器主窗口分為編輯區域和預覽區域。

  • 編輯區域(左欄): 該編輯器區域使用QPlainTextEdit實現。
  • 預覽區域(右欄): 預覽區域使用QWebEngineView實現的。為了呈現文本,借助Web引擎內部的JavaScript庫,將Markdown文本轉換為HTML格式。預覽是通過QWebChannel發送編輯區域的文本內容到QWebEngineView渲染(支持邊編輯邊渲染更新)。
0x01 實現
  • 為編輯區域加載markdown格式文件。
QFile defaultTextFile(":/default.md");
defaultTextFile.open(QIODevice::ReadOnly);
ui->editor->setPlainText(defaultTextFile.readAll());
  • 使用QWebChannel綁定page(QWebEngineView)對文本進行更新。
connect(ui->editor, &QPlainTextEdit::textChanged,
        [this]() { m_content.setText(ui->editor->toPlainText()); });

QWebChannel *channel = new QWebChannel(this);
channel->registerObject(QStringLiteral("content"), &m_content);
page->setWebChannel(channel);
  • 加載網頁文件用于接收ui->editor(QPlainTextEdit)的內容。
ui->preview->setUrl(QUrl("qrc:/index.html"));
  • 在index.html中,我們加載一個自定義樣式表和兩個JavaScript庫。markdown.css是由Kevin Burke創建的markdown友好樣式表。marked.js是Markdown解析器和編譯器,由Christopher Jeffrey編寫,旨在提高速度,而qwebchannel.js是QWebChannel模塊的一部分(用于數據交互)。
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<head>
  <link rel="stylesheet" type="text/css" href="3rdparty/markdown.css">
  <script src="3rdparty/marked.js"></script>
  <script src="qrc:/qtwebchannel/qwebchannel.js"></script>
</head>
<body>
  <div id="placeholder"></div>
  <script>
  'use strict';

  var placeholder = document.getElementById('placeholder');

  var updateText = function(text) {
      placeholder.innerHTML = marked(text); 
  }

  new QWebChannel(qt.webChannelTransport,
    function(channel) {
      var content = channel.objects.content;
      updateText(content.text);
      content.textChanged.connect(updateText);
    }
  );
  </script>
</body>
</html>
  • uml簡圖
0x02 關于更多
  • 在QtCreator軟件可以找到:
  • 或在以下Qt安裝目錄找到
C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\webenginewidgets\markdowneditor
關聯標簽:
环球体育-【平台】