notepad.cpp Example File | Qt Widgets 5.12.9

- Qt 5.12
- Qt Widgets
- Getting Started Programming with Qt Widgets
- notepad.cpp Example File
- Qt 5.12.9 Reference Documentation

# notepad.cpp Example File

tutorials/notepad/notepad.cpp

     /****************************************************************************
     **
     ** Copyright (C) 2017 The Qt Company Ltd.
     ** Contact: https://www.qt.io/licensing/
     **
     ** This file is part of the documentation of the Qt Toolkit.
     **
     ** $QT_BEGIN_LICENSE:BSD$
     ** Commercial License Usage
     ** Licensees holding valid commercial Qt licenses may use this file in
     ** accordance with the commercial license agreement provided with the
     ** Software or, alternatively, in accordance with the terms contained in
     ** a written agreement between you and The Qt Company. For licensing terms
     ** and conditions see https://www.qt.io/terms-conditions. For further
     ** information use the contact form at https://www.qt.io/contact-us.
     **
     ** BSD License Usage
     ** Alternatively, you may use this file under the terms of the BSD license
     ** as follows:
     **
     ** "Redistribution and use in source and binary forms, with or without
     ** modification, are permitted provided that the following conditions are
     ** met:
     **   * Redistributions of source code must retain the above copyright
     **     notice, this list of conditions and the following disclaimer.
     **   * Redistributions in binary form must reproduce the above copyright
     **     notice, this list of conditions and the following disclaimer in
     **     the documentation and/or other materials provided with the
     **     distribution.
     **   * Neither the name of The Qt Company Ltd nor the names of its
     **     contributors may be used to endorse or promote products derived
     **     from this software without specific prior written permission.
     **
     **
     ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
     **
     ** $QT_END_LICENSE$
     **
     ****************************************************************************/

     #include <QFile>
     #include <QFileDialog>
     #include <QTextStream>
     #include <QMessageBox>
     #if defined(QT_PRINTSUPPORT_LIB)
     #include <QtPrintSupport/qtprintsupportglobal.h>
     #if QT_CONFIG(printer)
     #if QT_CONFIG(printdialog)
     #include <QPrintDialog>
     #endif // QT_CONFIG(printdialog)
     #include <QPrinter>
     #endif // QT_CONFIG(printer)
     #endif // QT_PRINTSUPPORT_LIB
     #include <QFont>
     #include <QFontDialog>

     #include "notepad.h"
     #include "ui_notepad.h"

     Notepad::Notepad(QWidget *parent) :
         QMainWindow(parent),
         ui(new Ui::Notepad)
     {
         ui->setupUi(this);
         this->setCentralWidget(ui->textEdit);

         connect(ui->actionNew, &QAction::triggered, this, &Notepad::newDocument);
         connect(ui->actionOpen, &QAction::triggered, this, &Notepad::open);
         connect(ui->actionSave, &QAction::triggered, this, &Notepad::save);
         connect(ui->actionSave_as, &QAction::triggered, this, &Notepad::saveAs);
         connect(ui->actionPrint, &QAction::triggered, this, &Notepad::print);
         connect(ui->actionExit, &QAction::triggered, this, &Notepad::exit);
         connect(ui->actionCopy, &QAction::triggered, this, &Notepad::copy);
         connect(ui->actionCut, &QAction::triggered, this, &Notepad::cut);
         connect(ui->actionPaste, &QAction::triggered, this, &Notepad::paste);
         connect(ui->actionUndo, &QAction::triggered, this, &Notepad::undo);
         connect(ui->actionRedo, &QAction::triggered, this, &Notepad::redo);
         connect(ui->actionFont, &QAction::triggered, this, &Notepad::selectFont);
         connect(ui->actionBold, &QAction::triggered, this, &Notepad::setFontBold);
         connect(ui->actionUnderline, &QAction::triggered, this, &Notepad::setFontUnderline);
         connect(ui->actionItalic, &QAction::triggered, this, &Notepad::setFontItalic);
         connect(ui->actionAbout, &QAction::triggered, this, &Notepad::about);

     // Disable menu actions for unavailable features
     #if !QT_CONFIG(printer)
         ui->actionPrint->setEnabled(false);
     #endif

     #if !QT_CONFIG(clipboard)
         ui->actionCut->setEnabled(false);
         ui->actionCopy->setEnabled(false);
         ui->actionPaste->setEnabled(false);
     #endif
     }

     Notepad::~Notepad()
     {
         delete ui;
     }

     void Notepad::newDocument()
     {
         currentFile.clear();
         ui->textEdit->setText(QString());
     }

     void Notepad::open()
     {
         QString fileName = QFileDialog::getOpenFileName(this, "Open the file");
         QFile file(fileName);
         currentFile = fileName;
         if (!file.open(QIODevice::ReadOnly | QFile::Text)) {
             QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString());
             return;
         }
         setWindowTitle(fileName);
         QTextStream in(&file);
         QString text = in.readAll();
         ui->textEdit->setText(text);
         file.close();
     }

     void Notepad::save()
     {
         QString fileName;
         // If we don't have a filename from before, get one.
         if (currentFile.isEmpty()) {
             fileName = QFileDialog::getSaveFileName(this, "Save");
             currentFile = fileName;
         } else {
             fileName = currentFile;
         }
         QFile file(fileName);
         if (!file.open(QIODevice::WriteOnly | QFile::Text)) {
             QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
             return;
         }
         setWindowTitle(fileName);
         QTextStream out(&file);
         QString text = ui->textEdit->toPlainText();
         out << text;
         file.close();
     }

     void Notepad::saveAs()
     {
         QString fileName = QFileDialog::getSaveFileName(this, "Save as");
         QFile file(fileName);

         if (!file.open(QFile::WriteOnly | QFile::Text)) {
             QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
             return;
         }
         currentFile = fileName;
         setWindowTitle(fileName);
         QTextStream out(&file);
         QString text = ui->textEdit->toPlainText();
         out << text;
         file.close();
     }

     void Notepad::print()
     {
     #if QT_CONFIG(printer)
         QPrinter printDev;
     #if QT_CONFIG(printdialog)
         QPrintDialog dialog(&printDev, this);
         if (dialog.exec() == QDialog::Rejected)
             return;
     #endif // QT_CONFIG(printdialog)
         ui->textEdit->print(&printDev);
     #endif // QT_CONFIG(printer)
     }

     void Notepad::exit()
     {
         QCoreApplication::quit();
     }

     void Notepad::copy()
     {
     #if QT_CONFIG(clipboard)
         ui->textEdit->copy();
     #endif
     }

     void Notepad::cut()
     {
     #if QT_CONFIG(clipboard)
         ui->textEdit->cut();
     #endif
     }

     void Notepad::paste()
     {
     #if QT_CONFIG(clipboard)
         ui->textEdit->paste();
     #endif
     }

     void Notepad::undo()
     {
          ui->textEdit->undo();
     }

     void Notepad::redo()
     {
         ui->textEdit->redo();
     }

     void Notepad::selectFont()
     {
         bool fontSelected;
         QFont font = QFontDialog::getFont(&fontSelected, this);
         if (fontSelected)
             ui->textEdit->setFont(font);
     }

     void Notepad::setFontUnderline(bool underline)
     {
         ui->textEdit->setFontUnderline(underline);
     }

     void Notepad::setFontItalic(bool italic)
     {
         ui->textEdit->setFontItalic(italic);
     }

     void Notepad::setFontBold(bool bold)
     {
         bold ? ui->textEdit->setFontWeight(QFont::Bold) :
                ui->textEdit->setFontWeight(QFont::Normal);
     }

     void Notepad::about()
     {
        QMessageBox::about(this, tr("About MDI"),
                     tr("The <b>Notepad</b> example demonstrates how to code a basic "
                        "text editor using QtWidgets"));

     }