📄 editor.cpp
字号:
#include <QtGui>#include "editor.h"Editor::Editor(QWidget *parent) : QTextEdit(parent){ action = new QAction(this); action->setCheckable(true); connect(action, SIGNAL(triggered()), this, SLOT(show())); connect(action, SIGNAL(triggered()), this, SLOT(setFocus())); isUntitled = true; fileFilters = tr("Text files (*.txt)\n" "All files (*)"); connect(document(), SIGNAL(contentsChanged()), this, SLOT(documentWasModified())); setWindowIcon(QPixmap(":/images/document.png")); setAttribute(Qt::WA_DeleteOnClose);}void Editor::newFile(){ static int documentNumber = 1; curFile = tr("document%1.txt").arg(documentNumber); setWindowTitle(curFile + "[*]"); action->setText(curFile); isUntitled = true; ++documentNumber;}bool Editor::open(){ QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), ".", fileFilters); if (fileName.isEmpty()) return false; return openFile(fileName);}bool Editor::openFile(const QString &fileName){ if (readFile(fileName)) { setCurrentFile(fileName); return true; } else { return false; }}bool Editor::save(){ if (isUntitled) { return saveAs(); } else { return saveFile(curFile); }}bool Editor::saveAs(){ QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), curFile, fileFilters); if (fileName.isEmpty()) return false; return saveFile(fileName);}QSize Editor::sizeHint() const{ return QSize(72 * fontMetrics().width('x'), 25 * fontMetrics().lineSpacing());}void Editor::closeEvent(QCloseEvent *event){ if (okToContinue()) { event->accept(); } else { event->ignore(); }}void Editor::documentWasModified(){ setWindowModified(true);}bool Editor::okToContinue(){ if (document()->isModified()) { int r = QMessageBox::warning(this, tr("MDI Editor"), tr("File %1 has been modified.\n" "Do you want to save your changes?") .arg(strippedName(curFile)), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); if (r == QMessageBox::Yes) { return save(); } else if (r == QMessageBox::Cancel) { return false; } } return true;}bool Editor::saveFile(const QString &fileName){ if (writeFile(fileName)) { setCurrentFile(fileName); return true; } else { return false; }}void Editor::setCurrentFile(const QString &fileName){ curFile = fileName; isUntitled = false; action->setText(strippedName(curFile)); document()->setModified(false); setWindowTitle(strippedName(curFile) + "[*]"); setWindowModified(false);}bool Editor::readFile(const QString &fileName){ QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox::warning(this, tr("MDI Editor"), tr("Cannot read file %1:\n%2.") .arg(file.fileName()) .arg(file.errorString())); return false; } QTextStream in(&file); QApplication::setOverrideCursor(Qt::WaitCursor); setPlainText(in.readAll()); QApplication::restoreOverrideCursor(); return true;}bool Editor::writeFile(const QString &fileName){ QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this, tr("MDI Editor"), tr("Cannot write file %1:\n%2.") .arg(file.fileName()) .arg(file.errorString())); return false; } QTextStream out(&file); QApplication::setOverrideCursor(Qt::WaitCursor); out << document()->toPlainText(); QApplication::restoreOverrideCursor(); return true;}QString Editor::strippedName(const QString &fullFileName){ return QFileInfo(fullFileName).fileName();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -