函数原型 QString QFileDialog::getOpenFileName( QWidget *parent = nullptr, const QString &caption = tr("Open File"), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Option options = QFileDialog::Options() ); 代码举例 QString fn = QFileDialog::getOpenFileName(this,"openFile","/home/QFile","*.txt;;*.h *.c"); 假设已经给fn指定好路径了,那么则有fn.open(权限)
文件打开权限
| 函数 | 值 | 描述 |
|---|---|---|
QIODevice::NotOpen | 0x0000 | 未打开模式。文件没有被打开。 |
QIODevice::ReadOnly | 0x0001 | 只读模式。文件被打开以进行读取操作。 |
QIODevice::WriteOnly | 0x0002 | 只写模式。文件被打开以进行写入操作。 |
QIODevice::ReadWrite | 0x0003 | 读写模式。文件被打开以进行读取和写入操作。 |
QIODevice::Append | 0x0004 | 追加模式。文件被打开以在末尾追加数据,不会覆盖原有内容。 |
QIODevice::Truncate | 0x0008 | 截断模式。如果文件存在,将清空文件内容。 |
QIODevice::Text | 0x0010 | 文本模式。以文本模式打开文件,行结束符会自动转换为系统特定的格式(例如\n 在Unix/Linux系统中,\r\n 在Windows系统中)。 |
QIODevice::Unbuffered | 0x0040 | 无缓冲模式。禁用缓冲区,直接操作设备。 |
QIODevice::NewOnly | 0x0100 | 仅在文件不存在时创建文件。如果文件已存在,操作将失败。 |
QIODevice::Existing | 0x0200 | 仅在文件已存在时打开文件。如果文件不存在,操作将失败。 |
QIODevice::UnrestrictedRead | 0x0400 | 允许未受限制的读取访问。可以用于某些情况下需要特别权限的读取操作。 |
bool ret = fn.open(QIODevice::ReadOnly); if(ret == false){ ui->textEdit->setText("以只读方式打开失败"); return; } 
char buf[20400] ={0}; r = fn.read(buf,sizeof(buf)); if(r<0){ ui->textEdit->setText("读取失败"); return; } ui->textEdit->setText(buf); - 一行一行读 //需要包含QTextStream头文件 QTextStream fntext(&fn);fn是QFile类型,指定了文件的读取路径 ui->textEdit->clear(); while(!fntext.atEnd()){//fntext.atEnd():检查文件是否已经读取到末尾。 QString line =fntext.readLine(); ui->textEdit->append(line); } void Widget::btnAppendClickedSlotFun() { int r; QFile fn(ui->lineEdit->text()); bool ret = fn.open(QIODevice::Append); if(ret == false){ ui->textEdit->setText("追加写入失败"); return; } QString txtStr = ui->textEdit->toPlainText(); std::string str = txtStr.toStdString(); const char *pchar = str.c_str(); r = fn.write(pchar,txtStr.toLocal8Bit().length()); if(r<0){ ui->textEdit->setText("写入失败"); return; } fn.close(); } void Widget::btnWriteClickedSlotFun() { int r; QFile fn(ui->lineEdit->text()); bool ret = fn.open(QIODevice::WriteOnly|QIODevice::Truncate); if(ret==false){ ui->textEdit->setText("打开写入失败"); return; } QString txtStr = ui->textEdit->toPlainText(); std::string stdstr = txtStr.toStdString(); const char *pchar = stdstr.c_str(); r = fn.write(pchar,txtStr.toLocal8Bit().length()); if(r<0){ ui->textEdit->setText("写入失败"); return; } fn.close(); } void Widget::btnCreateClickedSlotFun() { QFile fn(ui->lineEdit->text()); fn.open(QIODevice::WriteOnly);//避免空文件打开时警告 fn.close(); } //widget.h #ifndef WIDGET_H #define WIDGET_H #include QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); public slots: void btnOpenClickedSlotFun(); void btnReadClickedSlotFun(); void btnWriteClickedSlotFun(); void btnAppendClickedSlotFun(); void btnDeleteClickedSlotFun(); void btnCreateClickedSlotFun(); private: Ui::Widget *ui; }; #endif // WIDGET_H //widget.h #include "widget.h" #include "ui_widget.h" #include #include Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); ui->lineEdit->setText("打开文件存放的路径"); ui->btnOpen->setText("打开文件"); connect(ui->btnOpen,SIGNAL(clicked()),this,SLOT(btnOpenClickedSlotFun())); ui->btnRead->setText("读取文件"); connect(ui->btnRead,SIGNAL(clicked()),this,SLOT(btnReadClickedSlotFun())); ui->btnWrite->setText("写入文件"); connect(ui->btnWrite,SIGNAL(clicked()),this,SLOT(btnWriteClickedSlotFun())); ui->btnAppend->setText("追加写入文件"); connect(ui->btnAppend,SIGNAL(clicked()),this,SLOT(btnAppendClickedSlotFun())); ui->btnDelete->setText("删除文件"); connect(ui->btnDelete,SIGNAL(clicked()),this,SLOT(btnDeleteClickedSlotFun())); ui->btnCreate->setText("创建文件"); connect(ui->btnCreate,SIGNAL(clicked()),this,SLOT(btnCreateClickedSlotFun())); } Widget::~Widget() { delete ui; } void Widget::btnOpenClickedSlotFun() { QString fn = QFileDialog::getOpenFileName(this,"openFile", "/mnt/hgfs/linux_learn/QT_teacher_information/"); if(fn.isEmpty()){ ui->lineEdit->setText("选中目录失败,请重新选中"); return ; } ui->lineEdit->setText(fn); } void Widget::btnReadClickedSlotFun() { int r; QFile fn(ui->lineEdit->text()); bool ret = fn.open(QIODevice::ReadOnly); if(ret == false){ ui->textEdit->setText("打开失败"); return; } /* char buf[20400] ={0}; r = fn.read(buf,sizeof(buf)); if(r<0){ ui->textEdit->setText("读取失败"); return; } ui->textEdit->setText(buf);*/ QTextStream fntext(&fn); ui->textEdit->clear(); while(!fntext.atEnd()){ QString line =fntext.readLine(); ui->textEdit->append(line); } fn.close(); } void Widget::btnWriteClickedSlotFun() { int r; QFile fn(ui->lineEdit->text()); bool ret = fn.open(QIODevice::WriteOnly|QIODevice::Truncate); if(ret==false){ ui->textEdit->setText("打开写入失败"); return; } QString txtStr = ui->textEdit->toPlainText(); std::string stdstr = txtStr.toStdString(); const char *pchar = stdstr.c_str(); r = fn.write(pchar,txtStr.toLocal8Bit().length()); if(r<0){ ui->textEdit->setText("写入失败"); return; } fn.close(); } void Widget::btnAppendClickedSlotFun() { int r; QFile fn(ui->lineEdit->text()); bool ret = fn.open(QIODevice::Append); if(ret == false){ ui->textEdit->setText("追加写入失败"); return; } QString txtStr = ui->textEdit->toPlainText(); std::string str = txtStr.toStdString(); const char *pchar = str.c_str(); r = fn.write(pchar,txtStr.toLocal8Bit().length()); if(r<0){ ui->textEdit->setText("写入失败"); return; } fn.close(); } void Widget::btnDeleteClickedSlotFun() { QFile fn(ui->lineEdit->text()); bool r = fn.remove(); if(r==false){ ui->textEdit->setText("删除失败"); return; }else{ ui->textEdit->setText("删除成功"); } } void Widget::btnCreateClickedSlotFun() { QFile fn(ui->lineEdit->text()); fn.open(QIODevice::WriteOnly);//避免空文件打开时警告 fn.close(); } 
下一篇:u盘可以在哪里下载软件