Q之旅---04 文本编辑器

1 基本知识

FileDialog :文件资源对话框

//获取打开文件名称

 static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());

//获取文件打开文件路径

    static QUrl getOpenFileUrl(QWidget *parent = Q_NULLPTR,
                               const QString &caption = QString(),
                               const QUrl &dir = QUrl(),
                               const QString &filter = QString(),
                               QString *selectedFilter = Q_NULLPTR,
                               Options options = Options(),
                               const QStringList &supportedSchemes = QStringList());

   //获取保存文件名称

    static QString getSaveFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());

// 保存保存文件路径

 static QUrl getSaveFileUrl(QWidget *parent = Q_NULLPTR,
                               const QString &caption = QString(),
                               const QUrl &dir = QUrl(),
                               const QString &filter = QString(),
                               QString *selectedFilter = Q_NULLPTR,
                               Options options = Options(),
                               const QStringList &supportedSchemes = QStringList());

   

File :文件操作

 bool exists() const;
    static bool exists(const QString &fileName); //检查文件是否存在

  //删除文件
    bool remove();
    static bool remove(const QString &fileName);

//重命名

    bool rename(const QString &newName);
    static bool rename(const QString &oldName, const QString &newName);

//打开文件
   bool open(OpenMode flags) Q_DECL_OVERRIDE;
    bool open(FILE *f, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
    bool open(int fd, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);

FileInfo :文件信息

QTextStream   :文本流操作  读写文本

  QTextStream out(&file);
   out<<ui->textEdit->toPlainText();//输出文本为提示文本

   QTextStream in(&file);

//输入文本为提示文本
    ui->textEdit->setPlainText(in.readAll());

 

2 示例代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    isUntitle=true;
    curfile=tr("未命名.txt");
    this->setWindowTitle(curfile);
}

MainWindow::~MainWindow()
{
    delete ui;


}

void MainWindow::on_actionOpen_O_triggered()
{
  if(isSave())
  {
      QString filename=QFileDialog::getOpenFileName(this);
      if(!filename.isEmpty())
      {
          ui->textEdit->setVisible(true);
      }
  }
}

void MainWindow::on_actionSave_S_triggered()
{
  Save();
}

void MainWindow::on_actionSave_as_A_triggered()
{
  SaveAs();
}

void MainWindow::on_actionNews_N_triggered()
{
    NewFiles();
}

void MainWindow::NewFiles(){


    if(isSave())
    {
        isUntitle=true;
        curfile=tr("未命名.txt");
        setWindowTitle(curfile);
        ui->textEdit->clear();
        ui->textEdit->setVisible(true);
    }
}
bool MainWindow::Save(){

    if(isUntitle)
    {
        return SaveAs();
    }
    else{

        return SaveFile(curfile);
    }

}

bool MainWindow::SaveAs(){

    QString  filename=tr("");
    filename=QFileDialog::getSaveFileName(this,tr("另存为\n"),curfile);
    if(filename.isEmpty())
    {
        return false;
    }
    else{
        return SaveFile(filename);
    }

}
bool MainWindow::isSave(){

    if(ui->textEdit->document()->isModified())
    {
        QMessageBox box;
        box.setWindowTitle(tr("警告"));
        box.setIcon(QMessageBox::Warning);
        box.setText(curfile+tr("尚未保存,是否保存?"));
        QPushButton *btn=box.addButton(tr("是\n"),QMessageBox::YesRole);
        box.addButton(tr("否(&N)"),QMessageBox::NoRole);
        QPushButton *btnc=box.addButton(tr("取消"),QMessageBox::RejectRole);
        box.exec();
        if(box.clickedButton()==btn)
        {
            return Save();
        }
        else if(box.clickedButton()==btnc)
        {
             return false;
        }

    }

    return  isUntitle;
}

bool  MainWindow::SaveFile(const QString  &filename){

   QFile  file(filename);
   if(!file.open(QFile::WriteOnly|QFile::Text))
   {
       QMessageBox::warning(this,tr("多文件编辑器"),tr("无法写入文件%1, /n 52").arg(filename,file.errorString()));
   }
   QTextStream out(&file);
   out<<ui->textEdit->toPlainText();
   isUntitle=false;
   curfile=QFileInfo(filename).canonicalFilePath();
   setWindowTitle(curfile);
   return  true;
}

bool  MainWindow::LoadFile(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);
    QApplication::setOverrideCursor(Qt::WaitCursor);
    ui->textEdit->setPlainText(in.readAll());
    QApplication::setOverrideCursor(Qt::CustomCursor);
    curfile=QFileInfo(filename).canonicalFilePath();
    return true;
}

void MainWindow::on_actionClose_C_triggered()
{
    if(isSave())
    {
        ui->textEdit->setVisible(true);
    }
}

void MainWindow::on_actionback_triggered()
{
    ui->textEdit->undo();
}

void MainWindow::on_actioncopy_c_triggered()
{
    ui->textEdit->cut();
}


void MainWindow::on_actionPaste_V_triggered()
{
    ui->textEdit->paste();
}

void  MainWindow::closeEvent(QCloseEvent *event)
{
    if(isSave())
    {
        event->accept();
    }
    else
    {
        event->ignore();
    }
}
 

 

源码路径;https://gitee.com/codemaner/qt_learning_record/tree/master  Demo 13

 

 

转载于:https://my.oschina.net/u/3768017/blog/1816959

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值