QT——2.3简易记事本的实现:练习QFile、QFileDialog、QTextStream、QFontDialog、QColorDialog、QDateTime等类的应用

版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎各位道友留言指正,多谢! https://blog.csdn.net/w464960660/article/details/88206129

【目标】:做一个简易记事本,实现练习QFile、QFileDialog、QDir、QTextStream、QFontDialog、QFont、QColorDialog、QColor、QDateTime等类的应用

【心得】:
1、使用某一个功能,在.h文件中加入对应的头文件;
2、对象与对象之间的控制/通信等利用信号与槽来解决很方便,如在主窗口构造函数中加入如下设置字体 :
    QObject::connect(ui->fontAction,SIGNAL(triggered()),this,SLOT(setFontSlot()));
3、不知道某一类的用法,选中,按F1可在帮助文档中获取,其中有很多实用的案例;
4、TextEdit功能很强大,直接具备文本编辑等功能,编辑窗口下的undo/redo/copy/paste/selectall/cut 功能直接使用TextEdit自带的方法即可实现,详见代码。

【界面】:

      

【源码】:
.cpp

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("Untitled——notepad");
    QObject::connect(ui->newAction,SIGNAL(triggered()),this,SLOT(newFileSlot()));
    QObject::connect(ui->openAction,SIGNAL(triggered()),this,SLOT(openFileSlot()));
    QObject::connect(ui->saveAction,SIGNAL(triggered()),this,SLOT(saveFileSlot()));
    QObject::connect(ui->exitAction,SIGNAL(triggered()),this,SLOT(close()));

    QObject::connect(ui->fontAction,SIGNAL(triggered()),this,SLOT(setFontSlot()));
    QObject::connect(ui->colorAction,SIGNAL(triggered()),this,SLOT(setColorSlot()));
    QObject::connect(ui->dateAction,SIGNAL(triggered()),this,SLOT(currentDateTimeSlot()));
    //编辑功能
    QObject::connect(ui->undoAction,SIGNAL(triggered()),ui->textEdit,SLOT(undo()));
    QObject::connect(ui->redoAction,SIGNAL(triggered()),ui->textEdit,SLOT(redo()));
    QObject::connect(ui->copyAction,SIGNAL(triggered()),ui->textEdit,SLOT(copy()));
    QObject::connect(ui->cutAction,SIGNAL(triggered()),ui->textEdit,SLOT(cut()));
    QObject::connect(ui->pasteAction,SIGNAL(triggered()),ui->textEdit,SLOT(paste()));
    QObject::connect(ui->selectallAction,SIGNAL(triggered()),ui->textEdit,SLOT(selectAll()));


}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::newFileSlot()
{
    if(ui->textEdit->document()->isModified())
        qDebug()<<"curent file modified";
    else
        qDebug()<<"not modified";
}

void MainWindow::openFileSlot()
{
    QString fileName=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());
    qDebug()<<"fileName is"<<fileName;
    if(fileName.isEmpty())
    {

        QMessageBox::information(this,"Error Message","Please Select a Text File");
        return;
    }
    QFile *file= new QFile;
    file->setFileName(fileName);  //set file name
    bool ok=file->open(QIODevice::ReadOnly); //open file as read only mode
    if(ok)
    {
        //文件与文本流关联
        QTextStream in(file);
        ui->textEdit->setText(in.readAll());
        file->close();
        delete file;

    }
    else
    {
        QMessageBox::information(this,"Error Message","File OPen Error"+file->errorString());
        return;
    }

}

void MainWindow::saveFileSlot()
{
    qDebug()<<"here";
    QString fileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
    if(fileName.isEmpty())
    {
        QMessageBox::information(this,"Error Message","Please Select a FIle");
        return;
    }
    QFile *file =new QFile;
    file->setFileName(fileName);
    bool ok=file->open(QIODevice::WriteOnly);
    if(ok)
    {
       QTextStream out(file);
       out<<ui->textEdit->toPlainText(); //转换为纯文本,再重定向至out
       file->close();
       delete file;
    }
    else
    {
        QMessageBox::information(this,"Error Message","Save File Eror");
        return;
    }
}
void MainWindow::printFileSlot()
{
    //QPrintDialog static member call
}
void MainWindow::setFontSlot()
{
  bool ok;
  QFont font = QFontDialog::getFont(&ok, this);
  if (ok)
  {
      ui->textEdit->setFont(font);
  }
  else
  {
        QMessageBox::information(this,"Error Message","Error Set Font!");
        return;
  }
}
void MainWindow::setColorSlot()
{
      QColor color = QColorDialog::getColor(Qt::red, this);

      if (color.isValid())
      {
        ui->textEdit->setTextColor(color);
      }
      else
        QMessageBox::information(this,"Error Message","Color is unvalid");
          return;

}
void MainWindow::currentDateTimeSlot()
{

    QDateTime current=QDateTime::currentDateTime();
    QString time=current.toString("yyyy-M-dd hh:mm:ss");
    ui->textEdit->append(time);
}

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QDebug>
#include<QFile>
#include<QFileDialog>
#include<QDir>
#include<QTextStream>
#include<QFontDialog>
#include<QFont>
#include<QColorDialog>
#include<QColor>
#include<QDateTime>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
    void newFileSlot();
    void openFileSlot(); //打开一个已经存在的文本文件
    void saveFileSlot();//保存文件到磁盘
    void printFileSlot();
    void setFontSlot();//设置字体的槽
    void setColorSlot();//设置字体的颜色
};

#endif // MAINWINDOW_H

猜你喜欢

转载自blog.csdn.net/w464960660/article/details/88206129