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