QT 记事本小程序

//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QTextEdit>
/*程序退出的事件*/
#include <QCloseEvent>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    QTextEdit * edit1;
    /*打开*/
    QMenu *menufile;
    /*编辑*/
    QMenu *menuedit;
    /*帮助*/
    QMenu *menuhelper;
    /*打开文件*/
    QAction *openfilea;
    /*创建文件*/
    QAction *newfile;
    /*保存文件*/
    QAction *savefilea;
    /*退出*/
    QAction * exitprof;
    /*复制*/
    QAction *copyfile;
    /*剪切*/
    QAction *cutfile;
    /*粘贴*/
    QAction *pastefile;
    /*关于记事本*/
    QAction *lookinfo;
    /*子类中重写父类退出函数,实现自定义退出*/
    void closeEvent(QCloseEvent *event);
private slots:
    void myopenfile();
    void mycreatefile();
    void mysavefile();
    void myclosewin();
    void mycopyfilen();
    void mycutfile();
    void mypastefile();
    void mylookinfo();
};

#endif // MAINWINDOW_H
//main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.resize(800,600);
    w.show();

    return a.exec();
}
//mainwindow.cpp
#include "mainwindow.h"

#include <QMessageBox>
#include <QFileDialog>
#include <QFile>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(tr("记事本"));

    edit1=new QTextEdit();
    this->setCentralWidget(edit1);
    /*设置默认字体大小*/
    edit1->setFontPointSize(15);

    openfilea=new QAction(tr("打开"),this);
    openfilea->setShortcut(tr("Ctrl+O"));

    newfile=new QAction(tr("新建"),this);
    newfile->setShortcut(tr("Ctrl+N"));

    savefilea=new QAction(tr("保存"),this);
    savefilea->setShortcut(tr("Ctrl+S"));

    exitprof=new QAction(tr("退出"),this);
    exitprof->setShortcut(tr("Ctrl+Q"));

    menufile=this->menuBar()->addMenu(tr("文件"));
    menufile->addAction(openfilea);
    menufile->addAction(newfile);
    menufile->addAction(savefilea);
    /*在保存和退出之间加入一个分隔符,为了防止用户点击过快,直接点击退出程序了,友好设计*/
    menufile->addSeparator();
    menufile->addAction(exitprof);

    connect(openfilea,SIGNAL(triggered()),this,SLOT(myopenfile()));
    connect(newfile,SIGNAL(triggered()),this,SLOT(mycreatefile()));
    connect(savefilea,SIGNAL(triggered()),this,SLOT(mysavefile()));
    connect(exitprof,SIGNAL(triggered()),this,SLOT(myclosewin()));

    copyfile=new QAction(tr("复制"),this);
    copyfile->setShortcut(tr("Ctrl+C"));

    cutfile=new QAction(tr("剪切"),this);
    cutfile->setShortcut(tr("Ctrl+X"));

    pastefile=new QAction(tr("粘贴"),this);
    pastefile->setShortcut(tr("Ctrl+V"));

    menuedit=this->menuBar()->addMenu(tr("编辑"));
    menuedit->addAction(copyfile);
    menuedit->addAction(cutfile);
    menuedit->addAction(pastefile);

    connect(copyfile,SIGNAL(triggered()),this,SLOT(mycopyfilen()));
    connect(cutfile,SIGNAL(triggered()),this,SLOT(mycutfile()));
    connect(pastefile,SIGNAL(triggered()),this,SLOT(mypastefile()));

    lookinfo=new QAction(tr("关于记事本"),this);
    lookinfo->setShortcut(tr("Ctrl+H"));
    menuhelper=this->menuBar()->addMenu(tr("帮助"));
    menuhelper->addAction(lookinfo);
    connect(lookinfo,SIGNAL(triggered()),this,SLOT(mylookinfo()));
}

MainWindow::~MainWindow()
{

}

//打开文件
void MainWindow::myopenfile()
{
    /*getOpenFileName不设置默认路径,那么默认路径就是当前目录*/
    QString spath=QFileDialog::getOpenFileName(this,"打开文件","","文本文档(*.txt)");
    if(spath.isEmpty()) return;
    /*将中心控件内容清空*/
    edit1->clear();
    //读文本
    QFile myfile(spath);
    /*只读方式打开文本*/
    if(myfile.open(QFile::ReadOnly))
    {
        QTextStream mystream(&myfile);
        while(!mystream.atEnd())
        {
            edit1->append(mystream.readLine());//在text控件内容尾部追加从文件中读到的内容
        }
        /*读完文件后,关闭文件*/
        myfile.close();
    }else{
        /*打开文件失败*/
        QMessageBox::critical(this,"错误信息",myfile.errorString());
    }
}

//新建文件
void MainWindow::mycreatefile()
{
    //清空文本
    edit1->clear();
}

//保存文件
void MainWindow::mysavefile()
{
    /*打开保存文件对话框*/
    QString spath=QFileDialog::getSaveFileName(this,"保存文件","/","文本文档(*.txt)");
    if(spath.isEmpty()) return;
    /*写文件*/
    QFile myfile(spath);
    if(myfile.open(QFile::WriteOnly|QFile::Truncate))
    {
        //定义文件流
        QTextStream mystream(&myfile);
        /*将edit1的文本内容转化成QString后写入文件*/
        mystream<<edit1->toPlainText();
        /*关闭文件*/
        myfile.close();
    }else{
        //保存文件失败
        QMessageBox::critical(this,"错误信息",myfile.errorString());
    }
}

//退出程序
void MainWindow::myclosewin()
{
    this->close();
}

//复制
void MainWindow::mycopyfilen()
{
    //
    edit1->copy();
}

//剪切
void MainWindow::mycutfile()
{
    //
    edit1->cut();
}

//粘贴
void MainWindow::mypastefile()
{
    //
    edit1->paste();
}

//帮助信息
void MainWindow::mylookinfo()
{
    //
    QMessageBox::information(this,"版权信息","版权所有,禁止盗版!");
}

//程序退出事件
void MainWindow::closeEvent(QCloseEvent *event)
{
    if(QMessageBox::question(this,tr("退出程序"),tr("是否退出程序"),QMessageBox::Yes|QMessageBox::No,QMessageBox::No)==QMessageBox::Yes)
    {
        event->accept();/*接受退出信号,程序退出*/
    }else
    {
        event->ignore();/*忽略退出信号,程序继续运行*/
    }
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/6007401.html