Brush up the text edit example
- Use initializer lists - Use u instead of QLatin1String() - Fix some clang warnings about else after return, constFirst() - Streamline code - Remove slot TextEdit::printPreview() which is not needed - Rename variable fileName to pdfFileName in filePrintPdf() to disambiguate from this->fileName Pick-to: 6.1 Change-Id: I377ebfd13487470b6f8eaf568dd5d99354f761f2 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
This commit is contained in:
parent
21607d5db5
commit
18aad6da87
@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the demonstration applications of the Qt Toolkit.
|
** This file is part of the demonstration applications of the Qt Toolkit.
|
||||||
@ -48,6 +48,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "textedit.h"
|
||||||
|
|
||||||
#include <QActionGroup>
|
#include <QActionGroup>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
@ -84,8 +86,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "textedit.h"
|
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
const QString rsrcPath = ":/images/mac";
|
const QString rsrcPath = ":/images/mac";
|
||||||
#else
|
#else
|
||||||
@ -125,19 +125,20 @@ TextEdit::TextEdit(QWidget *parent)
|
|||||||
colorChanged(textEdit->textColor());
|
colorChanged(textEdit->textColor());
|
||||||
alignmentChanged(textEdit->alignment());
|
alignmentChanged(textEdit->alignment());
|
||||||
|
|
||||||
connect(textEdit->document(), &QTextDocument::modificationChanged,
|
auto *document = textEdit->document();
|
||||||
|
connect(document, &QTextDocument::modificationChanged,
|
||||||
actionSave, &QAction::setEnabled);
|
actionSave, &QAction::setEnabled);
|
||||||
connect(textEdit->document(), &QTextDocument::modificationChanged,
|
connect(document, &QTextDocument::modificationChanged,
|
||||||
this, &QWidget::setWindowModified);
|
this, &QWidget::setWindowModified);
|
||||||
connect(textEdit->document(), &QTextDocument::undoAvailable,
|
connect(document, &QTextDocument::undoAvailable,
|
||||||
actionUndo, &QAction::setEnabled);
|
actionUndo, &QAction::setEnabled);
|
||||||
connect(textEdit->document(), &QTextDocument::redoAvailable,
|
connect(document, &QTextDocument::redoAvailable,
|
||||||
actionRedo, &QAction::setEnabled);
|
actionRedo, &QAction::setEnabled);
|
||||||
|
|
||||||
setWindowModified(textEdit->document()->isModified());
|
setWindowModified(document->isModified());
|
||||||
actionSave->setEnabled(textEdit->document()->isModified());
|
actionSave->setEnabled(document->isModified());
|
||||||
actionUndo->setEnabled(textEdit->document()->isUndoAvailable());
|
actionUndo->setEnabled(document->isUndoAvailable());
|
||||||
actionRedo->setEnabled(textEdit->document()->isRedoAvailable());
|
actionRedo->setEnabled(document->isRedoAvailable());
|
||||||
|
|
||||||
#ifndef QT_NO_CLIPBOARD
|
#ifndef QT_NO_CLIPBOARD
|
||||||
actionCut->setEnabled(false);
|
actionCut->setEnabled(false);
|
||||||
@ -145,7 +146,8 @@ TextEdit::TextEdit(QWidget *parent)
|
|||||||
actionCopy->setEnabled(false);
|
actionCopy->setEnabled(false);
|
||||||
connect(textEdit, &QTextEdit::copyAvailable, actionCopy, &QAction::setEnabled);
|
connect(textEdit, &QTextEdit::copyAvailable, actionCopy, &QAction::setEnabled);
|
||||||
|
|
||||||
connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &TextEdit::clipboardDataChanged);
|
connect(QGuiApplication::clipboard(), &QClipboard::dataChanged,
|
||||||
|
this, &TextEdit::clipboardDataChanged);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
textEdit->setFocus();
|
textEdit->setFocus();
|
||||||
@ -254,7 +256,7 @@ void TextEdit::setupEditActions()
|
|||||||
actionPaste->setPriority(QAction::LowPriority);
|
actionPaste->setPriority(QAction::LowPriority);
|
||||||
actionPaste->setShortcut(QKeySequence::Paste);
|
actionPaste->setShortcut(QKeySequence::Paste);
|
||||||
tb->addAction(actionPaste);
|
tb->addAction(actionPaste);
|
||||||
if (const QMimeData *md = QApplication::clipboard()->mimeData())
|
if (const QMimeData *md = QGuiApplication::clipboard()->mimeData())
|
||||||
actionPaste->setEnabled(md->hasText());
|
actionPaste->setEnabled(md->hasText());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -329,7 +331,7 @@ void TextEdit::setupTextActions()
|
|||||||
QActionGroup *alignGroup = new QActionGroup(this);
|
QActionGroup *alignGroup = new QActionGroup(this);
|
||||||
connect(alignGroup, &QActionGroup::triggered, this, &TextEdit::textAlign);
|
connect(alignGroup, &QActionGroup::triggered, this, &TextEdit::textAlign);
|
||||||
|
|
||||||
if (QApplication::isLeftToRight()) {
|
if (QGuiApplication::isLeftToRight()) {
|
||||||
alignGroup->addAction(actionAlignLeft);
|
alignGroup->addAction(actionAlignLeft);
|
||||||
alignGroup->addAction(actionAlignCenter);
|
alignGroup->addAction(actionAlignCenter);
|
||||||
alignGroup->addAction(actionAlignRight);
|
alignGroup->addAction(actionAlignRight);
|
||||||
@ -374,23 +376,23 @@ void TextEdit::setupTextActions()
|
|||||||
|
|
||||||
comboStyle = new QComboBox(tb);
|
comboStyle = new QComboBox(tb);
|
||||||
tb->addWidget(comboStyle);
|
tb->addWidget(comboStyle);
|
||||||
comboStyle->addItem("Standard");
|
comboStyle->addItems({"Standard",
|
||||||
comboStyle->addItem("Bullet List (Disc)");
|
"Bullet List (Disc)",
|
||||||
comboStyle->addItem("Bullet List (Circle)");
|
"Bullet List (Circle)",
|
||||||
comboStyle->addItem("Bullet List (Square)");
|
"Bullet List (Square)",
|
||||||
comboStyle->addItem("Task List (Unchecked)");
|
"Task List (Unchecked)",
|
||||||
comboStyle->addItem("Task List (Checked)");
|
"Task List (Checked)",
|
||||||
comboStyle->addItem("Ordered List (Decimal)");
|
"Ordered List (Decimal)",
|
||||||
comboStyle->addItem("Ordered List (Alpha lower)");
|
"Ordered List (Alpha lower)",
|
||||||
comboStyle->addItem("Ordered List (Alpha upper)");
|
"Ordered List (Alpha upper)",
|
||||||
comboStyle->addItem("Ordered List (Roman lower)");
|
"Ordered List (Roman lower)",
|
||||||
comboStyle->addItem("Ordered List (Roman upper)");
|
"Ordered List (Roman upper)",
|
||||||
comboStyle->addItem("Heading 1");
|
"Heading 1",
|
||||||
comboStyle->addItem("Heading 2");
|
"Heading 2",
|
||||||
comboStyle->addItem("Heading 3");
|
"Heading 3",
|
||||||
comboStyle->addItem("Heading 4");
|
"Heading 4",
|
||||||
comboStyle->addItem("Heading 5");
|
"Heading 5",
|
||||||
comboStyle->addItem("Heading 6");
|
"Heading 6"}),
|
||||||
|
|
||||||
connect(comboStyle, &QComboBox::activated, this, &TextEdit::textStyle);
|
connect(comboStyle, &QComboBox::activated, this, &TextEdit::textStyle);
|
||||||
|
|
||||||
@ -421,14 +423,15 @@ bool TextEdit::load(const QString &f)
|
|||||||
|
|
||||||
QByteArray data = file.readAll();
|
QByteArray data = file.readAll();
|
||||||
QMimeDatabase db;
|
QMimeDatabase db;
|
||||||
if (db.mimeTypeForFileNameAndData(f, data).name() == QLatin1String("text/html")) {
|
const QString &mimeTypeName = db.mimeTypeForFileNameAndData(f, data).name();
|
||||||
|
if (mimeTypeName == u"text/html") {
|
||||||
auto encoding = QStringDecoder::encodingForHtml(data);
|
auto encoding = QStringDecoder::encodingForHtml(data);
|
||||||
QString str = QStringDecoder(encoding ? *encoding : QStringDecoder::Utf8)(data);
|
QString str = QStringDecoder(encoding ? *encoding : QStringDecoder::Utf8)(data);
|
||||||
QUrl baseUrl = (f.front() == QLatin1Char(':') ? QUrl(f) : QUrl::fromLocalFile(f)).adjusted(QUrl::RemoveFilename);
|
QUrl fileUrl = f.startsWith(u':') ? QUrl(f) : QUrl::fromLocalFile(f);
|
||||||
textEdit->document()->setBaseUrl(baseUrl);
|
textEdit->document()->setBaseUrl(fileUrl.adjusted(QUrl::RemoveFilename));
|
||||||
textEdit->setHtml(str);
|
textEdit->setHtml(str);
|
||||||
#if QT_CONFIG(textmarkdownreader)
|
#if QT_CONFIG(textmarkdownreader)
|
||||||
} else if (db.mimeTypeForFileNameAndData(f, data).name() == QLatin1String("text/markdown")) {
|
} else if (mimeTypeName == u"text/markdown") {
|
||||||
textEdit->setMarkdown(QString::fromUtf8(data));
|
textEdit->setMarkdown(QString::fromUtf8(data));
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
@ -451,7 +454,7 @@ bool TextEdit::maybeSave()
|
|||||||
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
|
||||||
if (ret == QMessageBox::Save)
|
if (ret == QMessageBox::Save)
|
||||||
return fileSave();
|
return fileSave();
|
||||||
else if (ret == QMessageBox::Cancel)
|
if (ret == QMessageBox::Cancel)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -475,7 +478,7 @@ void TextEdit::fileNew()
|
|||||||
{
|
{
|
||||||
if (maybeSave()) {
|
if (maybeSave()) {
|
||||||
textEdit->clear();
|
textEdit->clear();
|
||||||
setCurrentFileName(QString());
|
setCurrentFileName({});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -484,18 +487,18 @@ void TextEdit::fileOpen()
|
|||||||
QFileDialog fileDialog(this, tr("Open File..."));
|
QFileDialog fileDialog(this, tr("Open File..."));
|
||||||
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
|
fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
|
||||||
fileDialog.setFileMode(QFileDialog::ExistingFile);
|
fileDialog.setFileMode(QFileDialog::ExistingFile);
|
||||||
fileDialog.setMimeTypeFilters(QStringList()
|
fileDialog.setMimeTypeFilters({
|
||||||
#if QT_CONFIG(texthtmlparser)
|
#if QT_CONFIG(texthtmlparser)
|
||||||
<< "text/html"
|
"text/html",
|
||||||
#endif
|
#endif
|
||||||
#if QT_CONFIG(textmarkdownreader)
|
#if QT_CONFIG(textmarkdownreader)
|
||||||
|
|
||||||
<< "text/markdown"
|
"text/markdown",
|
||||||
#endif
|
#endif
|
||||||
<< "text/plain");
|
"text/plain"});
|
||||||
if (fileDialog.exec() != QDialog::Accepted)
|
if (fileDialog.exec() != QDialog::Accepted)
|
||||||
return;
|
return;
|
||||||
const QString fn = fileDialog.selectedFiles().first();
|
const QString fn = fileDialog.selectedFiles().constFirst();
|
||||||
if (load(fn))
|
if (load(fn))
|
||||||
statusBar()->showMessage(tr("Opened \"%1\"").arg(QDir::toNativeSeparators(fn)));
|
statusBar()->showMessage(tr("Opened \"%1\"").arg(QDir::toNativeSeparators(fn)));
|
||||||
else
|
else
|
||||||
@ -504,9 +507,7 @@ void TextEdit::fileOpen()
|
|||||||
|
|
||||||
bool TextEdit::fileSave()
|
bool TextEdit::fileSave()
|
||||||
{
|
{
|
||||||
if (fileName.isEmpty())
|
if (fileName.isEmpty() || fileName.startsWith(u":/"))
|
||||||
return fileSaveAs();
|
|
||||||
if (fileName.startsWith(QStringLiteral(":/")))
|
|
||||||
return fileSaveAs();
|
return fileSaveAs();
|
||||||
|
|
||||||
QTextDocumentWriter writer(fileName);
|
QTextDocumentWriter writer(fileName);
|
||||||
@ -525,22 +526,21 @@ bool TextEdit::fileSaveAs()
|
|||||||
{
|
{
|
||||||
QFileDialog fileDialog(this, tr("Save as..."));
|
QFileDialog fileDialog(this, tr("Save as..."));
|
||||||
fileDialog.setAcceptMode(QFileDialog::AcceptSave);
|
fileDialog.setAcceptMode(QFileDialog::AcceptSave);
|
||||||
QStringList mimeTypes;
|
QStringList mimeTypes{"text/plain",
|
||||||
mimeTypes << "text/plain"
|
|
||||||
#if QT_CONFIG(textodfwriter)
|
#if QT_CONFIG(textodfwriter)
|
||||||
<< "application/vnd.oasis.opendocument.text"
|
"application/vnd.oasis.opendocument.text",
|
||||||
#endif
|
#endif
|
||||||
#if QT_CONFIG(textmarkdownwriter)
|
#if QT_CONFIG(textmarkdownwriter)
|
||||||
<< "text/markdown"
|
"text/markdown",
|
||||||
#endif
|
#endif
|
||||||
<< "text/html";
|
"text/html"};
|
||||||
fileDialog.setMimeTypeFilters(mimeTypes);
|
fileDialog.setMimeTypeFilters(mimeTypes);
|
||||||
#if QT_CONFIG(textodfwriter)
|
#if QT_CONFIG(textodfwriter)
|
||||||
fileDialog.setDefaultSuffix("odt");
|
fileDialog.setDefaultSuffix("odt");
|
||||||
#endif
|
#endif
|
||||||
if (fileDialog.exec() != QDialog::Accepted)
|
if (fileDialog.exec() != QDialog::Accepted)
|
||||||
return false;
|
return false;
|
||||||
const QString fn = fileDialog.selectedFiles().first();
|
const QString fn = fileDialog.selectedFiles().constFirst();
|
||||||
setCurrentFileName(fn);
|
setCurrentFileName(fn);
|
||||||
return fileSave();
|
return fileSave();
|
||||||
}
|
}
|
||||||
@ -549,13 +549,12 @@ void TextEdit::filePrint()
|
|||||||
{
|
{
|
||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
|
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
|
||||||
QPrinter printer(QPrinter::HighResolution);
|
QPrinter printer(QPrinter::HighResolution);
|
||||||
QPrintDialog *dlg = new QPrintDialog(&printer, this);
|
QPrintDialog dlg(&printer, this);
|
||||||
if (textEdit->textCursor().hasSelection())
|
if (textEdit->textCursor().hasSelection())
|
||||||
dlg->setOption(QAbstractPrintDialog::PrintSelection);
|
dlg.setOption(QAbstractPrintDialog::PrintSelection);
|
||||||
dlg->setWindowTitle(tr("Print Document"));
|
dlg.setWindowTitle(tr("Print Document"));
|
||||||
if (dlg->exec() == QDialog::Accepted)
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
textEdit->print(&printer);
|
textEdit->print(&printer);
|
||||||
delete dlg;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -564,21 +563,11 @@ void TextEdit::filePrintPreview()
|
|||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printpreviewdialog)
|
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printpreviewdialog)
|
||||||
QPrinter printer(QPrinter::HighResolution);
|
QPrinter printer(QPrinter::HighResolution);
|
||||||
QPrintPreviewDialog preview(&printer, this);
|
QPrintPreviewDialog preview(&printer, this);
|
||||||
connect(&preview, &QPrintPreviewDialog::paintRequested, this, &TextEdit::printPreview);
|
connect(&preview, &QPrintPreviewDialog::paintRequested, textEdit, &QTextEdit::print);
|
||||||
preview.exec();
|
preview.exec();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEdit::printPreview(QPrinter *printer)
|
|
||||||
{
|
|
||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
|
|
||||||
textEdit->print(printer);
|
|
||||||
#else
|
|
||||||
Q_UNUSED(printer);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TextEdit::filePrintPdf()
|
void TextEdit::filePrintPdf()
|
||||||
{
|
{
|
||||||
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
|
#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
|
||||||
@ -589,13 +578,13 @@ void TextEdit::filePrintPdf()
|
|||||||
fileDialog.setDefaultSuffix("pdf");
|
fileDialog.setDefaultSuffix("pdf");
|
||||||
if (fileDialog.exec() != QDialog::Accepted)
|
if (fileDialog.exec() != QDialog::Accepted)
|
||||||
return;
|
return;
|
||||||
QString fileName = fileDialog.selectedFiles().first();
|
QString pdfFileName = fileDialog.selectedFiles().constFirst();
|
||||||
QPrinter printer(QPrinter::HighResolution);
|
QPrinter printer(QPrinter::HighResolution);
|
||||||
printer.setOutputFormat(QPrinter::PdfFormat);
|
printer.setOutputFormat(QPrinter::PdfFormat);
|
||||||
printer.setOutputFileName(fileName);
|
printer.setOutputFileName(pdfFileName);
|
||||||
textEdit->document()->print(&printer);
|
textEdit->document()->print(&printer);
|
||||||
statusBar()->showMessage(tr("Exported \"%1\"")
|
statusBar()->showMessage(tr("Exported \"%1\"")
|
||||||
.arg(QDir::toNativeSeparators(fileName)));
|
.arg(QDir::toNativeSeparators(pdfFileName)));
|
||||||
//! [0]
|
//! [0]
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -631,7 +620,7 @@ void TextEdit::textFamily(const QString &f)
|
|||||||
void TextEdit::textSize(const QString &p)
|
void TextEdit::textSize(const QString &p)
|
||||||
{
|
{
|
||||||
qreal pointSize = p.toFloat();
|
qreal pointSize = p.toFloat();
|
||||||
if (p.toFloat() > 0) {
|
if (pointSize > 0) {
|
||||||
QTextCharFormat fmt;
|
QTextCharFormat fmt;
|
||||||
fmt.setFontPointSize(pointSize);
|
fmt.setFontPointSize(pointSize);
|
||||||
mergeFormatOnWordOrSelection(fmt);
|
mergeFormatOnWordOrSelection(fmt);
|
||||||
@ -857,7 +846,7 @@ void TextEdit::cursorPositionChanged()
|
|||||||
void TextEdit::clipboardDataChanged()
|
void TextEdit::clipboardDataChanged()
|
||||||
{
|
{
|
||||||
#ifndef QT_NO_CLIPBOARD
|
#ifndef QT_NO_CLIPBOARD
|
||||||
if (const QMimeData *md = QApplication::clipboard()->mimeData())
|
if (const QMimeData *md = QGuiApplication::clipboard()->mimeData())
|
||||||
actionPaste->setEnabled(md->hasText());
|
actionPaste->setEnabled(md->hasText());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -896,13 +885,13 @@ void TextEdit::colorChanged(const QColor &c)
|
|||||||
|
|
||||||
void TextEdit::alignmentChanged(Qt::Alignment a)
|
void TextEdit::alignmentChanged(Qt::Alignment a)
|
||||||
{
|
{
|
||||||
if (a & Qt::AlignLeft)
|
if (a.testFlag(Qt::AlignLeft))
|
||||||
actionAlignLeft->setChecked(true);
|
actionAlignLeft->setChecked(true);
|
||||||
else if (a & Qt::AlignHCenter)
|
else if (a.testFlag(Qt::AlignHCenter))
|
||||||
actionAlignCenter->setChecked(true);
|
actionAlignCenter->setChecked(true);
|
||||||
else if (a & Qt::AlignRight)
|
else if (a.testFlag(Qt::AlignRight))
|
||||||
actionAlignRight->setChecked(true);
|
actionAlignRight->setChecked(true);
|
||||||
else if (a & Qt::AlignJustify)
|
else if (a.testFlag(Qt::AlignJustify))
|
||||||
actionAlignJustify->setChecked(true);
|
actionAlignJustify->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2021 The Qt Company Ltd.
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the demonstration applications of the Qt Toolkit.
|
** This file is part of the demonstration applications of the Qt Toolkit.
|
||||||
@ -52,8 +52,6 @@
|
|||||||
#define TEXTEDIT_H
|
#define TEXTEDIT_H
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QMap>
|
|
||||||
#include <QPointer>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QAction;
|
class QAction;
|
||||||
@ -106,7 +104,6 @@ private slots:
|
|||||||
|
|
||||||
void clipboardDataChanged();
|
void clipboardDataChanged();
|
||||||
void about();
|
void about();
|
||||||
void printPreview(QPrinter *);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupFileActions();
|
void setupFileActions();
|
||||||
@ -146,7 +143,6 @@ private:
|
|||||||
QFontComboBox *comboFont;
|
QFontComboBox *comboFont;
|
||||||
QComboBox *comboSize;
|
QComboBox *comboSize;
|
||||||
|
|
||||||
QToolBar *tb;
|
|
||||||
QString fileName;
|
QString fileName;
|
||||||
QTextEdit *textEdit;
|
QTextEdit *textEdit;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user