Q之旅---04 文本編輯器

1 基本知識git

FileDialog :文件資源對話框編輯器

//獲取打開文件名稱ide

 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());ui

//獲取文件打開文件路徑this

    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());code

   //獲取保存文件名稱資源

    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());rem

// 保存保存文件路徑文檔

 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());get

   

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

相關文章
相關標籤/搜索