ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

05. 文件管理及标准对话框

2022-07-31 18:34:25  阅读:154  来源: 互联网

标签:文件 ok 05 对话框 QMessageBox 使用 QIODevice include


文件管理及标准对话框

1、目录操作

  • 主要用到两个类:QDir,QFileInfo

1.1、QDir

  • QDir 类具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件 系统,而且还可以存取 Qt 的资源文件。
  • 判断目录是否存在可以使用 exists(),目录的属性可以使用 isReadable()、isAbsolute ()、 isRelative() 和 isRoot()来获取 。 目录下有很多条目,包括文件、目录和符号连接,总的条目数可以使用 count()来 统计。 entryList()返回目录下所有条目组成的字符串链表 。 文件可以使用 remove()函数删除,删除目 录用 rmdir() ,改名用rename()。
  • 一般使用Filters对目录下的文件进行过滤。

1.2、QFileInfo

  • QFilelnfo 类提供了与系统无关的文件信息,包括文件的名称、在文件系统中的位置(路径)、文件的 访问权限以及是否是一个目录或者符号链接等 。 QFilelnfo也可以获取文件的大小和最近一次修改/读 取的时间,还可以获取 Qt 资源的相关信息 。
  • QFilelnfo 指向的文件可以在 QFileinfo 对象构建时设置,或者以后使用 setFile()来设置。可以使用以 exists()来查看文件是否存在,使用 size ()获取文件的大小。

1.3、判断文件夹是否存在

QDir dir("D:/test/QTmode");//绝对路径,或者相对路径,相对路径是项目的构建目录开始的地方
qDebug()<<dir.exists();//不存在返回假存在返回真

1.4创建目录

    QDir dir("D:/test");
    if(!dir.exists())
    {
        dir.mkdir("D:/test");
        qDebug()<<"创建了新的文件夹";
    }
    else
    {
        qDebug()<<"文件夹存在";
    }

1.5获取常用目录

QDir dir;
qDebug()<<dir.current();
qDebug()<<dir.currentPath();
qDebug()<<dir.homePath();
qDebug()<<dir.tempPath();
qDebug()<<dir.rootPath();

1.6切换路径

QDir dir("D:/text");
qDebug()<<dir.dirName();//当前文件夹的名字
qDebug()<<dir.absolutePath();//当前文件夹的绝对路径
dir.cd("C:/");//切换到C盘下
qDebug()<<dir.absolutePath()

1.7遍历文件

QDir dir("D:/QTvode/55555555555/build-qDir-Desktop_Qt_5_12_1_MinGW_64_bitDebug");
foreach(QFileInfo item,dir.entryInfoList())
{
    if(item.isDir())
    {
        qDebug()<<"文件夹:"<<item.filePath(); //fileName只有文件(夹)的名字
    }
    else if(item.isFile())
    {
        qDebug()<<"文件:"<<item.filePath();
    }
}

1.8文件过滤

QStringList listeners;
listeners<<"*.dll"<<"*.exe";//筛选条件
dir.setNameFilters(listeners);
qDebug()<<dir.entryList(listeners,QDir::Files);

2、文件操作

2.1QFile

  • QFile 类提供了 一个用于读/写文件的接口,它可以用来读/写文本文件、二进制文件和 Qt 资源的 I/0 设备。
  • 一般在构建 QFile 对象时便指定文件名,当然也可以使用 setFileName ()进行设置。可以使用 exists() 来检查文件是否存在使用 remove()来删除一个文件 。
  • 一个文件可以使用 open() 打开,使用 close()关闭,使用 flush()刷新 ,文件的读写可以使用 read ()、 readLine ()、 readAll ()和 write (),可以使用自size()函数来获取文件的大小,使用 seek ()来定位到文件 的任意位置,使用 pos ()来获取当前的位置,使用 atEnd ()来判断是否到达了文件的末尾 。
  • 还是可以用以下学过FILE,fstream这些来进行文件操作

2.2打开并写入文件

  • 文件操作流程 打开>写入/读取>关闭

  • 访问一个设备以前,需要使用 open ()函数打开该设备,而且必须指定正确的打开模式,不同的打开模 式之间可以使用“|”符号同时使用。

  • 打开设备后可以使用 write()或者 putChar()来进行写人,可以使用seek函数进行文件指针移动(如果 有),使用read ()、 readLine ()或者 readAll ()进行读取,最后使用 close()关闭设备。

枚举值 描述
QIODevice::NotOpen 未打开
QIODevice::ReadOnly 以只读方式打开
QIODevice::WriteOnly 以只写方式打开
QIODevice::ReadWrite 以读写方式打开
QIODevice::Append 以追加方式打开,新增的内容将被追加到文件末尾
QIODevice::Truncate 以重写方式打开,写入新数据时会将游标设置在文件开头,覆盖文件内容
QIODevice::Text 在读取时将行结束符转换成本地格式,例如win32平台上是\r\n
QIODevice::Unbuffered 忽略缓存

示例:

QFile file("1.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) //文件不存在时不会创建文件
{
    qDebug() << file.errorString();
}
else
{
    qDebug() << "打开成功!";
}
file.write("hello thank you!");
file.close();

2.3读取里面所有内容

QFile file("1.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) //文件不存在会创建文件,带text换行为\n不带为\r\n
{
    qDebug() << file.errorString();
}
else
{
    qDebug() << "打开成功!";
}
while(!file.atEnd())
{
    QByteArray line=file.readLine();
    qDebug()<<line;
}
file.close();

2.4其他操作

获取的文件大小:size()
更改文件的名字:rename("新名字")
删除文件:remove()
获取一行中的某个位子的字符:先用readLine()读完这行,然后通过 string的mid函数处理
mid(5,1)从第五个位置,获取1个字符
移动文件指针:seek(5)

2.5QIOdevice类

  • QIODevice 类是 Qt 所有 I/O 设备的基础类 ,为QFIle等类提供一个抽象接口

3、标准对话框

3.1标准输入对话框

#include <QInputDialog>
bool ok;
//以spinxbox形式展现的数字
int i= QInputDialog::getInt(this,"提示"," 获取数字",
                            15,//默认值
                            0,//最小值
                            100,//最大值
                            1,//步长(小数点后几位)
                            &ok);//用来确定是否点了ok
if(ok)
    ui->lineEdit->setText(QString("%1").arg(i));
#include <QInputDialog>
bool ok;
//以spinxbox形式展现的数字(小数)
int i= QInputDialog::getDouble(this,"提示"," 获取数字",
                               15.34,//默认值
                               0,//最小值
                               100,//最大值
                               3,//显示小数点后几位
                               &ok);//用来确定是否点了ok
if(ok)
    ui->lineEdit->setText(QString("%1").arg(i));
#include <QInputDialog>
QStringList items;
//显示QStringList中的字符串
items<<"字符串1"<<"字符串2"<<"字符串3"<<"字符串4"<<"字符串5";
bool ok;
QString item=QInputDialog::getItem(this,"提示","获取字符串",
                                   items,//QStringList类型
                                   0,//默认选中
                                   true,//内容是否可更改
                                   &ok);
if(ok&&!item.isEmpty())
    ui->lineEdit_2->setText(item);
#include <QInputDialog>
bool ok;
//获取输入的字符串,一行
QString text=QInputDialog::getText(this,"提示","输入字符串",QLineEdit::Normal,"默认显示内容",&ok);
if(ok&&!text.isEmpty())
    ui->lineEdit_3->setText(text);
#include <QInputDialog>
bool ok;
//获取输入的字符串,多行
QString text=QInputDialog::getMultiLineText(this,"提示","输入多行字符串","默认显示内容",&ok);
if(ok&&!text.isEmpty())
    ui->textBrowser->setText(text);

3.2标准字体对话框

#include <QFontDialog>
bool ok;
QFont font=QFontDialog::getFont(&ok,
                                QFont("黑体"),//默认字体
                                this,
                                "选择字体");
if(ok)
{
    ui->lineEdit_5->setText(font.key());//字体名字
    ui->lineEdit_5->setFont(font); //设置字体
}

3.4标准文件对话框

#include <QFileDialog>
QString path=QFileDialog::getExistingDirectory(this,"选择文件","D:\\");//起始路径
if(!path.isEmpty())
    ui->lineEdit_6->setText(path);
#include <QFileDialog>
//只能选择单个文件
QString fileName=QFileDialog::getOpenFileName(this,"选择文件","D:\\",//起始路径
                                              "All Files (*);;Text Files(*.txt)");//筛选条件
if(!fileName.isEmpty())
    ui->lineEdit_7->setText(fileName);
#include <QFileDialog>
//打开多个文件的路径
QStringList fileName=QFileDialog::getOpenFileNames(this,"选择文件","D:\\",
                                                   "All Files (*);;Text Files (*.txt)");
if(!fileName.isEmpty())
{
    for(int i=0;i<fileName.size();i++)
    {
        ui->textBrowser_2->append(fileName[i]);
    }
}
#include <QFileDialog>
//保存文件用的,但是不会创建文件,需要自己通过文件操作创建文件,写入内容
QString fileName=QFileDialog::getSaveFileName(this,"保存文件","D:\\","All Files (*);;Text Files (*.txt)");
if(!fileName.isEmpty())
    ui->lineEdit_8->setText(fileName);

3.5标准消息对话框

QMessageBox::information(this," 标题","文本");
QMessageBox::warning(this,"标题","文本");
QMessageBox::critical(this,"标题","文本");
QMessageBox::question(this,"标题","文本");
/*返回值是选中的按钮,对于第4,5,6个参事指明的按钮,当然有默认的,可以不填,注意第一个父类的,这
里的父类得要是一个窗口对象,而且不能在窗口处理完前死亡,按钮可以是以下按钮*/
QMessageBox::NoButton
QMessageBox::Ok
QMessageBox::Cancel
QMessageBox::Yes
QMessageBox::No
QMessageBox::Abort
QMessageBox::Retry
QMessageBox::Ignore
QMessageBox::YesAll
QMessageBox::NoAll

标签:文件,ok,05,对话框,QMessageBox,使用,QIODevice,include
来源: https://www.cnblogs.com/WZ-1120232314/p/16537760.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有