「Qtの基礎 - Markdown」の版間の差分

ナビゲーションに移動 検索に移動
502行目: 502行目:
   
   
     return a.exec();
     return a.exec();
}
</syntaxhighlight>
<br>
==== HTMLファイルへ変換 ====
<syntaxhighlight lang="c++">
// MarkdownConverter.hファイル
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <cmark.h>
#include <QDebug>
class MarkdownConverter
{
public:
    MarkdownConverter() = default;
    bool convertFile(const QString &inputPath, const QString &outputPath)
    {
      // Markdownファイルの読み込み
      QFile inputFile(inputPath);
      if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
          qDebug() << "Markdownファイルのオープンに失敗: " << inputPath;
          return false;
      }
      QTextStream in(&inputFile);
      QString markdownContent = in.readAll();
      inputFile.close();
      // MarkdownファイルをHTMLファイルへ変換
      QString htmlContent = convertMarkdownToHtml(markdownContent);
      // HTMLファイルへ書き込み
      QFile outputFile(outputPath);
      if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
          qDebug() << "HTMLファイルの書き込みに失敗: " << outputPath;
          return false;
      }
      QTextStream out(&outputFile);
      out << htmlContent;
      outputFile.close();
      qDebug() << "HTMLファイルへの変換に成功: " << outputPath;
      return true;
    }
private:
    QString convertMarkdownToHtml(const QString& markdown)
    {
      // Markdownファイルをパース
      cmark_node *document = cmark_parse_document(markdown.toUtf8().constData(), markdown.length(), CMARK_OPT_DEFAULT);
      // Convert to HTML
      char *html = cmark_render_html(document, CMARK_OPT_DEFAULT);
      // HTMLの基本構文にラッピング
      QString fullHtml = QString(
          "<!DOCTYPE html>\n"
          "<html lang=\"en\">\n"
          "<head>\n"
          "    <meta charset=\"UTF-8\">\n"
          "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
          "    <title>Converted Markdown</title>\n"
          "</head>\n"
          "<body>\n"
          "%1\n"
          "</body>\n"
          "</html>"
      ).arg(QString::fromUtf8(html));
      // Free allocated memory
      free(html);
      cmark_node_free(document);
      return fullHtml;
    }
};
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// main.cppファイル
#include "MarkdownConverter.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString inputFile  = "<入力 : Markdownファイルのパス>";
    QString outputFile = "<出力 : HTMLファイルのパス>";
    MarkdownConverter converter;
    if (!converter.convertFile(inputFile, outputFile)) {
      qDebug() << "変換に失敗";
      return -1;
    }
    return 0;
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー