不废话了看代码吧:
#include#include #include #include
class MainWindow : public QMainWindow{ Q_OBJECT
public: explicit MainWindow(QWidget *parent = 0); ~MainWindow()=default;
private: void open()noexcept; void save()noexcept;
std::shared_ptropenAction; std::shared_ptr saveAction; std::shared_ptr openMenu; std::shared_ptr theToolBar; std::shared_ptr dockWidget; std::shared_ptr textEdit;
protected: virtual void closeEvent(QCloseEvent* ev)override;};
#include "mainwindow.h"#include#include #include #include #include #include #include
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ this->setWindowTitle(tr("shihuawoaini [*]")); //注意这里的[*]这是个占位符(placeholder).
this->setMinimumSize(500, 400);
qDebug()<
this->openAction = std::shared_ptr(new QAction(tr("&open"), this)); (this->openAction)->setShortcut(QKeySequence::Open); //设置快捷建. (this->openAction)->setStatusTip(tr("open...")); connect((this->openAction).get(), &QAction::triggered, this, &MainWindow::open);
this->saveAction = std::shared_ptr(new QAction(tr("&save"), this)); saveAction->setShortcut(QKeySequence::Save); //设置快捷键. saveAction->setStatusTip(tr("save...")); connect(saveAction.get(), &QAction::triggered, this, &MainWindow::save);
this->openMenu = std::shared_ptr(menuBar()->addMenu(tr("open"))); (this->openMenu)->addAction(this->openAction.get());
this->theToolBar = std::shared_ptr(this->addToolBar(tr("File"))); (this->theToolBar)->addAction(this->openAction.get()); theToolBar->addAction(saveAction.get());
this->dockWidget = std::shared_ptr(new QDockWidget(tr("DockWidget"))); this->addDockWidget(Qt::LeftDockWidgetArea, (this->dockWidget).get());
this->statusTip(); this->statusBar();
this->textEdit = std::shared_ptr(new QTextEdit(this)); this->setCentralWidget(textEdit.get()); connect(textEdit.get(), &QTextEdit::textChanged, [=](){ this->setWindowModified(true); }); //重点!!!!!!!!!!!!!!!!!!!!! }
void MainWindow::open()noexcept{ QString fileName = QFileDialog::getOpenFileName(this, tr("open a file."), ".", tr("Text files(*.txt)"));
if(!fileName.isEmpty()){ QFile file(fileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox::warning(this, tr("Read File"), tr("Can not open file.\n%1").arg(fileName)); return;
}else{ QTextStream readFile(&file); textEdit->setText(readFile.readAll()); file.close(); }
}else{ QMessageBox::warning(this, tr("Path"), tr("You do not select any file.")); }}
void MainWindow::save()noexcept{ QString fileName = QFileDialog::getSaveFileName(this, tr("save file"),".", tr("Text files(*.txt);;Images (*.png *.jpg)"));
if(!fileName.isEmpty()){ QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){ QMessageBox::warning(this, tr("write file"), tr("open nothing")); return; }
QTextStream writeFile(&file); writeFile<<(this->textEdit)->toPlainText(); file.close();
}else{ QMessageBox::warning(this, tr("write fail"), tr("nothing for writing")); }
}
void MainWindow::closeEvent(QCloseEvent* ev) //重点!!!!!!!!!!!!!!!!! { if(this->isWindowModified()){ bool boolean = QMessageBox::question(this, tr("Close Window"), tr("Do you want exit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes;
qDebug()<accept(); }else{ ev->ignore(); }
}else{ ev->accept(); }