【C/C++学院】(19)QT版:记事本

利用主窗口类实现,QT版:记事本。

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QCloseEvent>#include <QTextEdit>#include <QMenu>#include <QMenuBar>#include <QAction>class MainWindow : public QMainWindow{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();private slots:void openfile();void newfile();void savefile();void exitfile();void copyfile();void cutfile();void pastefile();private:void createMenus();void createActions();void closeEvent(QCloseEvent *event);QTextEdit *text;QMenu *fileMenu;QMenu *editMenu;QAction *openFileAction;QAction *newFileAction;QAction *saveFileAction;QAction *exitFileAction;QAction *copyFileAction;QAction *cutFileAction;QAction *pasteFileAction;};#endif // MAINWINDOW_H#include "mainwindow.h"#include <QMessageBox>#include <QFileDialog>#include <QTextStream>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent){setWindowTitle("记事本");text = new QTextEdit(this);this->setCentralWidget(text);text->setFontPointSize(20);//设置默认字体大小createActions();createMenus();}MainWindow::~MainWindow(){}void MainWindow::openfile(){QString filename = QFileDialog::getOpenFileName(this, tr("打开文件"));if (filename.isEmpty())//如果没有选择要打开的文件名,,函数退出{return ;}QFile data(filename);if (data.open(QFile::ReadOnly))//以只读方式打开文件{text->clear();//首先将text空间内容清空QTextStream stream(&data);while (!stream.atEnd())//循环读取文件按,直到文件尾结束循环{text->append(stream.readLine());//在text控件内容尾部追加从文件中读取的内容}data.close();//读完文件后关闭文件}else{QMessageBox::critical(this, tr("错误"), data.errorString());}}void MainWindow::newfile(){text->clear();}void MainWindow::savefile(){QString filename = QFileDialog::getSaveFileName(this, tr("保存文件"));if (filename.isEmpty())//如果没有选择文件,函数退出{return ;}QFile data(filename);if (data.open(QFile::WriteOnly | QFile::Truncate))//以写方式打开文件,如果关键存在,则是追加模式{QTextStream stream(&data);stream<<text->toPlainText();//将text控件内容转化为QString后,写入文件data.close();}else{QMessageBox::critical(this, tr("错误"), data.errorString());}}void MainWindow::exitfile(){close();//exit(0);//直接退出}void MainWindow::copyfile(){text->copy();}void MainWindow::cutfile(){text->cut();}void MainWindow::pastefile(){text->paste();}void MainWindow::createMenus(){fileMenu = menuBar()->addMenu(tr("文件"));//建立文件菜单fileMenu->addAction(openFileAction);fileMenu->addAction(newFileAction);fileMenu->addAction(saveFileAction);fileMenu->addSeparator();//加入一个分隔符fileMenu->addAction(exitFileAction);editMenu = menuBar()->addMenu(tr("编辑"));editMenu->addAction(copyFileAction);editMenu->addAction(cutFileAction);editMenu->addAction(pasteFileAction);}void MainWindow::createActions(){openFileAction = new QAction(tr("打开"), this);openFileAction->setShortcut(tr("Ctrl+o"));connect(openFileAction, SIGNAL(triggered()), this, SLOT(openfile()));newFileAction = new QAction(tr("新建"), this);newFileAction->setShortcut(tr("Ctrl+N"));connect(newFileAction, SIGNAL(triggered()), this, SLOT(newfile()));saveFileAction = new QAction(tr("保存"), this);saveFileAction->setShortcut(tr("Ctrl+s"));connect(saveFileAction, SIGNAL(triggered()), this, SLOT(savefile()));exitFileAction = new QAction(tr("退出"), this);exitFileAction->setShortcut(tr("Ctrl+q"));connect(exitFileAction, SIGNAL(triggered()), this, SLOT(exitfile()));copyFileAction = new QAction(tr("复制"), this);copyFileAction->setShortcut(tr("Ctrl+c"));connect(copyFileAction, SIGNAL(triggered()), this, SLOT(copyfile()));cutFileAction = new QAction(tr("剪切"), this);cutFileAction->setShortcut(tr("Ctrl+x"));connect(cutFileAction, SIGNAL(triggered()), this, SLOT(cutfile()));pasteFileAction = new QAction(tr("粘贴"), this);pasteFileAction->setShortcut(tr("Ctrl+v"));connect(pasteFileAction, SIGNAL(triggered()), this, SLOT(pastefile()));}void MainWindow::closeEvent(QCloseEvent *event){QMessageBox::StandardButton button;button = QMessageBox::question(this, tr("退出程序"), QString(tr("是否退出")),QMessageBox::Yes | QMessageBox::No);if (button == QMessageBox::Yes){event->accept();//接受退出信号,程序退出}else{event->ignore();//忽略退出信息,程序继续运行}}#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.resize(600, 400);w.show();return a.exec();}

黄色蓝色或者砖红色,犹如童话世界。

【C/C++学院】(19)QT版:记事本

相关文章:

你感兴趣的文章:

标签云: