QT 写记事本

23 篇文章 1 订阅
5 篇文章 0 订阅

main.cpp

#include "mainwindow.h"
#include <QApplication>

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

    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QKeySequence>
#include<QIcon>
#include<QMessageBox>
#include<QFile>
#include<QFileDialog>
#include<QFileInfo>
#include<QDebug>
#include<QFontComboBox>
#include<QComboBox>
#include<QToolButton>
#include<QColorDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void openReadFile();
private slots:
    void newFileSlot();
    void openFileSlot();
    void saveFileSlot();
    void saveasFileSlot();
    void changeFontSlot(QFont font);
    void changeSizeSlot(QString size);
    void boldSlot(bool ok);
    void colorSlot();
    void italicSlot(bool ok);
    void underSlot(bool ok);

private:
    Ui::MainWindow *ui;
    QString fileName;
    QString filePath;
    QFontComboBox *font;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    fileName = "新文档.txt";
    this->setWindowTitle("新文档.txt");
    //给动作添加快捷键
    ui->actionnew->setShortcut(QKeySequence(QKeySequence::New));
    ui->actionopen->setShortcut(QKeySequence(QKeySequence::Open));
    ui->actionsave->setShortcut(QKeySequence(QKeySequence::Save));
    ui->actionsaves->setShortcut(QKeySequence(QKeySequence::SaveAs));

    //给动作添加图标
    ui->actionnew->setIcon(QIcon(":/icons/new.png"));
    ui->actionopen->setIcon(QIcon(":/icons/open.png"));
    ui->actionsave->setIcon(QIcon(":/icons/save.png"));

    //新建文件,绑定槽函数和信号
    connect(ui->actionnew,SIGNAL(triggered(bool)),this,SLOT(newFileSlot()));

    //打开文件,绑定槽函数和信号
    connect(ui->actionopen,SIGNAL(triggered(bool)),this,SLOT(openFileSlot()));

    //保存文件,绑定槽函数和信号;
    connect(ui->actionsave,SIGNAL(triggered(bool)),this,SLOT(saveFileSlot()));

    //另存为文件,绑定槽函数和信号
    connect(ui->actionsaves,SIGNAL(triggered(bool)),this,SLOT(saveasFileSlot()));

    //将菜单栏的动作添加到工具栏
    ui->mainToolBar->addAction(ui->actionnew);
    ui->mainToolBar->addAction(ui->actionopen);
    ui->mainToolBar->addAction(ui->actionsave);

    //设置字体
    font = new QFontComboBox(this);
    ui->mainToolBar->addWidget(font);
    connect(font,SIGNAL(currentFontChanged(QFont)),this,SLOT(changeFontSlot(QFont)));

    //设置字体大小
    QComboBox *size = new QComboBox(this);
    ui->mainToolBar->addWidget(size);
    QStringList list;
    list<<"8"<<"9"<<"10"<<"11"<<"12"<<"13"<<"14"<<"16"<<"18"<<"20";
    size->addItems(list);
    connect(size,SIGNAL(currentTextChanged(QString)),this,SLOT(changeSizeSlot(QString)));

    //设置颜色栏
    QToolButton *clrBtn = new QToolButton(this);
    ui->mainToolBar->addWidget(clrBtn);
    clrBtn->setIcon(QIcon(":/icons/color.png"));
    connect(clrBtn,SIGNAL(clicked(bool)),this,SLOT(colorSlot()));

    //设置加粗字体
    QToolButton *bold = new QToolButton(this);
    ui->mainToolBar->addWidget(bold);
    bold->setIcon(QIcon(":/icons/textbold.png"));
    bold->setCheckable(true);
    connect(bold,SIGNAL(clicked(bool)),this,SLOT(boldSlot(bool)));

    //设置斜体字
    QToolButton *italic = new QToolButton(this);
    ui->mainToolBar->addWidget(italic);
    italic->setIcon(QIcon(":/icons/textitalic.png"));
    italic->setCheckable(true);
    connect(italic,SIGNAL(clicked(bool)),this,SLOT(italicSlot(bool)));

    //设置下划线
    QToolButton *under = new QToolButton(this);
    ui->mainToolBar->addWidget(under);
    under->setIcon(QIcon(":/icons/textunder.png"));
    under->setCheckable(true);
    connect(under,SIGNAL(clicked(bool)),this,SLOT(underSlot(bool)));
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::newFileSlot()
{
    //判断文件内容是否 被修改
    if(true == ui->textEdit->document()->isModified())
    {
        //如果被修改,则弹出对话框,询问是否保存
        int ret = QMessageBox::question(this,"保存","是否保存当前文档?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
        //如果保存,则判断是否为无标题文件
        if(QMessageBox::Yes == ret )
        {
            //另存为,并修改标题栏
            if(fileName =="新文档.txt")
            {
               qDebug()<<"另存为!!";
               saveasFileSlot();
            }
            else
            {
                //保存,并修改标题栏
                saveFileSlot();
            }

        }
        else if(QMessageBox::No ==ret)
        {
            fileName ="新文档.txt";
            this->setWindowTitle("新文档.txt");
            ui->textEdit->clear();
        }else
        {
            return;
        }
    }
    else
    {
        //如果内容没有被修改,则直接改标题。
        fileName = "新文档.txt";
        this->setWindowTitle("新文档.txt");
        ui->textEdit->clear();
    }
}
// 打开文件
void MainWindow:: openFileSlot()
{
        //第一步,也需要先判断是否修改文件
    if(true == ui->textEdit->document()->isModified())
    {
        //如果被修改,先弹出对话框
        int ret = QMessageBox::question(this,"记事本","是否对修改的文件进行保存?",QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
        if(QMessageBox::Yes == ret )
        {
          if(fileName=="新文档.txt"){
                //另存为 并修改标题栏
                qDebug()<<"另存为!";
                saveasFileSlot();
            }
            else
            {
                //保存,
                qDebug()<<"保存!";
                //弹出打开对话框,修改标题烂,读文件到编辑区
                openReadFile();
            }
        }
        else if(QMessageBox::No == ret)
        {
            //直接打开文件
            openReadFile();
        }
        else
        {
            return;
        }
    }
    else
    {
        //如果没有修改当前文件。则直接打开文件
        openReadFile();
    }

}

//成员函数,打开并读文件,因为后面多次调用,所以在此单独实现
void MainWindow::openReadFile()
{
  filePath = QFileDialog::getOpenFileName(this,"open","./","TXT(*.txt)");
  if(false == filePath.isEmpty())
  {
      QFileInfo info(filePath);

      fileName = info.fileName();
      //更新标题栏
      this->setWindowTitle(fileName);
      //读文件内容到编辑区
      //以只读方式打开文件
      QFile file(filePath);
      bool ok = file.open(QIODevice::ReadOnly);
      if(true == ok)
      {
          //读文件
          QByteArray arr = file.readAll();
          //显示到编辑区
          ui->textEdit->setText(QString(arr));
          //关闭文件
          file.close();
      }
  }
}
void MainWindow ::saveFileSlot()
{
    //判断文件是否为无标题文件
    if(fileName =="新文档.txt")
    {
        //另存为,
        saveasFileSlot();
    }
    else
    {
        QFile file(filePath);
        bool ok = file.open(QIODevice::WriteOnly);
        if(true == ok)
        {
            //将编辑区的内容写入文件;
            QString str = ui->textEdit->toPlainText();
            QByteArray arr;
            arr.append(str);
            file.write(arr);
            file.close();
        }
    }
}
//另存为
void MainWindow::saveasFileSlot()
{
    //弹出另存为对话框,
    filePath = QFileDialog::getSaveFileName(this,"另存为","./","TXT(*.txt)");
    if(false == filePath.isEmpty())
    {
        //打开文件
        QFile file(filePath);
        bool ok = file.open(QIODevice::WriteOnly);
        if(true == ok)
        {
            //将编辑区的内容写入文件
            QString str = ui->textEdit->toPlainText();
            QByteArray arr;
            arr.append(str);
            file.write(arr);
            //关闭文件
            file.close();
            QFileInfo info(filePath);
            fileName = info.fileName();
            //更新标题栏
            this->setWindowTitle(fileName);
        }
    }
}
void MainWindow::changeFontSlot(QFont font)
{
    ui->textEdit->setCurrentFont(font);
}
void MainWindow::changeSizeSlot(QString size)
{
    ui->textEdit->setFontPointSize(size.toDouble());
}
//实现加粗的槽函数
void MainWindow::boldSlot(bool ok)
{
    if(true == ok)
    {
        ui->textEdit->setFontWeight(QFont::Bold);
    }else
    {
        ui->textEdit->setFontWeight(QFont::Normal);
    }
}
//实现颜色菜单的槽函数
void MainWindow::colorSlot()
{
    QColor clr =QColorDialog::getColor(Qt::red,this,"颜色");
    if(clr.isValid())
    {
        ui->textEdit->setTextColor(clr);
    }
}
//设置斜体字槽函数
void MainWindow::italicSlot(bool ok)
{
    if(true == ok)
    {
        ui->textEdit->setFontItalic(QFont::StyleItalic);
    }
    else
    {
        ui->textEdit->setFontItalic(QFont::StyleNormal);
    }
}

//设置下划线按钮槽函数
void MainWindow::underSlot(bool ok)
{
    if(true == ok)
    {
        ui->textEdit->setFontUnderline(QFont::UnderlineResolved);

    }
    else
    {
        ui->textEdit->setFontUnderline(QFont::UnderlineResolved);
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值