From 355ecfb11c838b4c9facc9a631e04a52531a2127 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 18 Dec 2018 00:56:37 +0100 Subject: Add QTextMarkdownWriter::writeTable(QAbstractTableModel) This provides the ability to write live data from a table to Markdown, which can be useful to load it into a text document or a wiki. But so far QTextMarkdownWriter is still a private class, intended to be used experimentally from QtQuick and perhaps later exposed in other ways. Change-Id: I0de4673987e4172178604e49b5a024a05d4486ba Reviewed-by: Richard Moe Gustavsen --- src/gui/text/qtextmarkdownwriter.cpp | 31 +++++++++++++++++++++++++++++++ src/gui/text/qtextmarkdownwriter_p.h | 2 ++ 2 files changed, 33 insertions(+) (limited to 'src') diff --git a/src/gui/text/qtextmarkdownwriter.cpp b/src/gui/text/qtextmarkdownwriter.cpp index c91248757a..fed4a7b766 100644 --- a/src/gui/text/qtextmarkdownwriter.cpp +++ b/src/gui/text/qtextmarkdownwriter.cpp @@ -64,6 +64,37 @@ bool QTextMarkdownWriter::writeAll(const QTextDocument &document) return true; } +void QTextMarkdownWriter::writeTable(const QAbstractTableModel &table) +{ + QVector tableColumnWidths(table.columnCount()); + for (int col = 0; col < table.columnCount(); ++col) { + tableColumnWidths[col] = table.headerData(col, Qt::Horizontal).toString().length(); + for (int row = 0; row < table.rowCount(); ++row) { + tableColumnWidths[col] = qMax(tableColumnWidths[col], + table.data(table.index(row, col)).toString().length()); + } + } + + // write the header and separator + for (int col = 0; col < table.columnCount(); ++col) { + QString s = table.headerData(col, Qt::Horizontal).toString(); + m_stream << "|" << s << QString(tableColumnWidths[col] - s.length(), Space); + } + m_stream << "|" << endl; + for (int col = 0; col < tableColumnWidths.length(); ++col) + m_stream << '|' << QString(tableColumnWidths[col], QLatin1Char('-')); + m_stream << '|'<< endl; + + // write the body + for (int row = 0; row < table.rowCount(); ++row) { + for (int col = 0; col < table.columnCount(); ++col) { + QString s = table.data(table.index(row, col)).toString(); + m_stream << "|" << s << QString(tableColumnWidths[col] - s.length(), Space); + } + m_stream << '|'<< endl; + } +} + void QTextMarkdownWriter::writeFrame(const QTextFrame *frame) { Q_ASSERT(frame); diff --git a/src/gui/text/qtextmarkdownwriter_p.h b/src/gui/text/qtextmarkdownwriter_p.h index 9845355259..2a9388ca2d 100644 --- a/src/gui/text/qtextmarkdownwriter_p.h +++ b/src/gui/text/qtextmarkdownwriter_p.h @@ -56,6 +56,7 @@ #include "qtextdocument_p.h" #include "qtextdocumentwriter.h" +#include "QAbstractTableModel" QT_BEGIN_NAMESPACE @@ -64,6 +65,7 @@ class Q_GUI_EXPORT QTextMarkdownWriter public: QTextMarkdownWriter(QTextStream &stream, QTextDocument::MarkdownFeatures features); bool writeAll(const QTextDocument &document); + void writeTable(const QAbstractTableModel &table); int writeBlock(const QTextBlock &block, bool table, bool ignoreFormat); void writeFrame(const QTextFrame *frame); -- cgit v1.2.3