A+记事本

来源:互联网 发布:2016诛仙数据互通查询 编辑:程序博客网 时间:2024/05/25 05:38

A+记事本

项目名称:A+记事本(应用程序版)

开发环境:Qt4  C++  

项目简介:使用Qt软件编写应用界面,实现菜单界面、新建、打开、保存、修改、撤销、剪切、复制、查找文本的功能,

图1:主界面


图2:菜单栏


图3:菜单栏


部分代码及解释:

void MainWindow::do_file_New()//新建函数
{
    if(do_file_SaveOrNot()==-1)//新建前判断原文件是否要保存
        return;//当在do_file_SaveOrNot()函数中选择cancel时取消操作
    isSaved = false;
    curFile = tr("未命名.txt");
    setWindowTitle(curFile);
    ui->textEdit->clear();//将文本清空
    ui->textEdit->setVisible(true);//使textEdite可见,即文本可编译
    second_statuslabel->setText(tr("新建文件成功"));
}
int MainWindow::do_file_SaveOrNot()//是否保存函数
{
    if(ui->textEdit->document()->isModified())//判断文本是否被更改
    {
        QMessageBox box;//QMessageBox 为一种模式对话框(短消息,图标,按钮)
        box.setWindowTitle(tr("警告"));//给对话框设定标题
        box.setIcon(QMessageBox::Warning);//设定对话框图标,QMessageBox的几种信息Warning,Information,Critical,Question
        box.setText(curFile + tr("尚未保存,是否保存?") );//设置对话框内容(此处curFile为绝对路径,也是内容部分)
        box.setStandardButtons(QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);//增加标准按钮(也可使用addButton)
        int flag=box.exec();//对话框被点击后退出状态
        if(flag==QMessageBox::Yes)
            do_file_Save();
        if(flag== QMessageBox::Cancel)
        {
           // box.close();//可以不加,因为点击后box即退出
            return -1;//用于其它函数的状态识别
        }
        ui->textEdit->document()->setModified(false);//点击Yes/No及产生对应操作后,设定文本不识别修改
    }
    else
    {
        isSaved=true;
    }
}
void MainWindow::do_file_Save()//保存函数
{  
    if(!isSaved)//对于新建文件的isSaved=false识别
    {
        do_file_SaveAs();
    }
    else
    {
        saveFile(curFile);
    }
}
void MainWindow::do_file_SaveAs()//另存为函数
{
    QString fileName=QFileDialog::getSaveFileName(this,tr("另存为"),curFile);
    //QFileDialog类为允许用户选择文件或目录的对话框
    //返回的是文件名不是绝对路径
    //依据this打开路径,窗口名为"另存为",默认文件名根据curFile设定
    if(!fileName.isEmpty())//当保存名为空时,将停留在对话窗口
    {
        saveFile(fileName);
    }
}
bool MainWindow::saveFile(const QString& fileName)//保存文件函数
{
    QFile file(fileName);//QFile类提供文件的输入/输出设备,给fileName创建一个新的文件对象
    if(!file.open(QFile::WriteOnly | QFile::Text))//以参数形式打开文件
    {
        QMessageBox::warning(this,tr("保存文件"),tr("无法保存文件%1:\n%2").arg(fileName).arg(file.errorString()));
        //无法打开文件的报错对话框,对话框标题为"保存文件",内容为"无法保存文件(文件名)",换行显示出报错原因
        return false;
    }
    QTextStream out(&file);//QTextStream类给file提供读写文本的功能,新建流out指向file
    out << ui->textEdit->toPlainText();//将文本编译器内容输出至out中
    isSaved = true;
    curFile = QFileInfo(fileName).canonicalFilePath();//返回文件的绝对路径(包括文件名)
    //QFileInfo类提供系统的文件信息
    setWindowTitle(curFile);//设置总窗口的标题
    ui->textEdit->document()->setModified(false);//将文件保存后不识别文件修改
    second_statuslabel->setText(tr("保存文件成功"));
    return true;
}
void MainWindow::do_file_Open()//打开文件函数
{
    if(do_file_SaveOrNot()==-1)//打开前判断原文件是否需要保存
        return;
    isSaved = true;
    QString fileName=QFileDialog::getOpenFileName(this);//由this决定路径,打开一个选择窗口
    if(!fileName.isEmpty())
    {
        do_file_Load(fileName);//载入文件函数
    }
    ui->textEdit->setVisible(true);//文本编译框设定为可视
}
bool MainWindow::do_file_Load(const QString &fileName)//载入文件函数
{
    QFile file(fileName);
    if(!file.open(QFile::ReadOnly | QFile::Text))
    {
        QMessageBox::warning(this,tr("读取文件"),tr("无法读取文件%1:\n%2").arg(fileName).arg(file.errorString()));
        return false;
    }
    QTextStream in(&file);
    ui->textEdit->setText(in.readAll());//setText()函数为设定文本内容,readAll()函数为读取全部内容
    curFile = QFileInfo(fileName).canonicalFilePath();
    setWindowTitle(curFile);
    second_statuslabel->setText(tr("打开文件成功"));
    return true;
}

至于QT资源文件.qrc的使用在网上随意都能找到教程

代码在我的资源里:

http://download.csdn.net/detail/ling_yi_/6297937