QT -文件IO

QFileDialog用于打开或保存文件的对话框,QFileInfo提供文件属性如存在、大小、时间等信息,QFile实现文件的读写。当长时间的IO操作如大文件拷贝阻塞主线程时,UI会变得不响应。QThread可用于避免这种问题,通过msleep函数模拟阻塞操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. QFileDialog 文件对话框

QFileDialog继承自QDialog,是一个用于选择读写文件或目录的对话框。与QMessageBox类似,也通过静态成员函数的调用显示弹窗。

// 参数1:父对象
// 参数2:窗口标题
// 参数3:在哪个目录中打开,如果使用默认值(空字符串),则为当前项目的构建目录
// 参数4:文件格式过滤器
// 返回值:选择的文件路径,选择失败为空字符串
QString QFileDialog::getOpenFileName|getSaveFileName(
                           QWidget * parent = 0, 
							const QString & caption = QString(), 
							const QString & dir = QString(), 
							const QString & filter = QString()) [static]

需要注意的是,QFileDialog本身只是一个窗口类,不具备任何IO功能。

2. QFileInfo 文件信息类

QFileInfo类可以获取某个文件的各种信息,常用函数如下:

// 构造函数
// 参数是文件路径,如果路径是非法路径,可以创建对象
QFileInfo::QFileInfo(const QString & file)// 判断对应路径下是否存在文件或目录
bool QFileInfo::exists() const// 获得文件的创建|上次修改|上次读取的时间
QDateTime QFileInfo::created() const
QDateTime QFileInfo::lastModified() const
QDateTime QFileInfo::lastRead() const// 判断送入的路径对应的是不是一个目录|文件|可执行文件
bool QFileInfo::isDir() const
bool QFileInfo::isFile() const
bool QFileInfo::isExecutable() const
// 文件是否隐藏|可读|可写|可执行bool QFileInfo::isHidden() const
bool QFileInfo::isReadable() const
bool QFileInfo::isWritable() const
bool QFileInfo::isExecutable() const
// 获取文件大小,单位字节qint64 QFileInfo::size() const

3. QFile 文件读写类

QFile类是真正进行文件读写的类型,间接继承了QIODevice类,QIODevice类是Qt中所有IO相关类型的基类,内部规定了最基础的读写接口。

相关函数如下所示。

// 构造函数,参数为文件路径,如果是非法路径,也能创建出对象
QFile::QFile(const QString & name)
// 打开文件输入输出流
// 参数为打开的模式
bool QIODevice::open(OpenMode mode) [virtual]
// 是否读取到文件尾
bool QIODevice::atEnd() const [virtual]
// 读取数据
// 参数:最大读取的字节量
// 返回值:读取的数据
QByteArray QIODevice::read(qint64 maxSize)
// 写出数据
// 参数:要写出的数据内容
// 返回值:实际写出的数据量,-1为出错
qint64 QIODevice::write(const QByteArray & byteArray)
// 关闭流
void QIODevice::close() [virtual]
// 清空文件读写的缓存区数据
bool QFileDevice::flush()
// 返回可用数据的大小
qint64 QIODevice::size() const [virtual]

4. UI操作与耗时操作

在默认的情况下,Qt应用程序只有一个线程,这个线程也被称为主线程。主线程主要的执行任务是程序运行的主要逻辑操作和UI操作,因此主线程也被称为UI线程。

但是当单线程的文件拷贝器拷贝大文件时,会导致主线程持续长期执行文件拷贝的耗时操作(一些IO、巨型计算等),此时用户的UI操作被耗时操作阻塞,无法及时响应,因此会出现UI卡顿的现象。

包括关闭命令都是在主线程中执行的,当操作系统发现某程序关闭命令无法及时响应时,会弹出程序未响应窗口,引导用户等待或关闭当前主线程阻塞的应用程序。

5. 复现未响应

QThread类是Qt的线程类,其中有一个函数特别适合模拟阻塞的操作:

// 强制CPU在当前线程睡眠固定的毫秒数
void QThread::msleep(unsigned long msecs) [static]
<think>嗯,用户遇到了一个问题,在尝试配置Qt构建时,执行configure命令时提示“没有那个文件或目录”。我需要先分析可能的原因,然后逐步指导用户解决。 首先,用户运行的是../qt-everywhere-src-5.15.9/configure,但提示文件不存在。可能的原因有几个: 1. 路径错误:用户可能没有正确进入存放Qt源代码的目录,或者目录结构不符合预期。需要确认当前目录是否正确,以及上级目录是否存在qt-everywhere-src-5.15.9文件夹,并且其中确实有configure文件。 2. 文件权限问题:虽然可能性较低,但configure脚本可能没有可执行权限,这时候需要给脚本添加执行权限。 3. 源代码未完全下载或解压:用户可能下载的Qt源码包不完整,或者解压时出了问题,导致configure文件缺失。 接下来,我应该分步骤指导用户检查这些问题。首先建议用户检查目录结构,确认configure文件是否存在。如果不存在,可能需要重新下载或解压源码。如果存在,检查权限问题,可能需要chmod +x。另外,提醒用户Qt 5.15.9的正确源码包名称,避免解压后的目录名不同。 另外,用户使用的是VMware虚拟机,可能在文件传输或解压过程中出现问题,需要确保源码正确放置。最后,如果确认路径正确,权限没问题,可能需要重新获取源码,并验证完整性。</think>你遇到的错误提示`bash: ../qt-everywhere-src-5.15.9/configure: 没有那个文件或目录`表示系统无法找到配置脚本。以下是逐步排查和解决方案: --- ### **步骤一:验证源码路径** 当前路径显示为: `uerui@yuerui-vmwarevirtualplatform:~/Qt/qt-build$` 你尝试执行的命令是: `../qt-everywhere-src-5.15.9/configure` 请检查以下路径结构: ``` ~/Qt/ ├── qt-build/             # 当前所在目录 └── qt-everywhere-src-5.15.9/   # 预期存在的源码目录(但系统提示找不到) ``` **执行以下命令验证路径:** ```bash ls -l ../qt-everywhere-src-5.15.9/configure ``` --- ### **可能原因及解决方案** #### **1. 源码目录名称不匹配** Qt官方源码包解压后的默认目录名可能包含版本号变体(如`5.15.9`与`5.15.9-gpl`)。 **解决方法:** ```bash # 查看上级目录实际名称 ls ~/Qt/ # 如果实际目录名为 qt-everywhere-src-5.15.9-gpl,则修改命令: ../qt-everywhere-src-5.15.9-gpl/configure ``` #### **2. 未正确解压源码包** 如果源码压缩包未完整解压,可能导致`configure`文件缺失。 **解决方法:** ```bash # 确保已下载源码包(例如 qt-everywhere-src-5.15.9.tar.xz) cd ~/Qt/ tar -xvf qt-everywhere-src-5.15.9.tar.xz # 重新解压 ``` #### **3. 缺少可执行权限(罕见但需检查)** ```bash # 如果文件存在但无权限 chmod +x ../qt-everywhere-src-5.15.9/configure ``` --- ### **补充建议** 1. **推荐使用官方GPL包** 从[Qt官方下载地址](https://download.qt.io/official_releases/qt/5.15/5.15.9/single/)获取完整源码包,确保文件完整性: ```bash wget https://download.qt.io/official_releases/qt/5.15/5.15.9/single/qt-everywhere-src-5.15.9.tar.xz ``` 2. **验证文件哈希值** 避免因下载不完整导致文件缺失: ```bash sha256sum qt-everywhere-src-5.15.9.tar.xz # 对比官网提供的校验值 ``` 3. **建议的构建流程** 成功找到`configure`后,可继续执行: ```bash cd ~/Qt/qt-build ../qt-everywhere-src-5.15.9/configure \ -prefix /opt/Qt5.15.9 \ -platform linux-g++ \ -opensource -confirm-license \ -nomake examples -nomake tests \ -qt-zlib -qt-libpng -qt-libjpeg \ -xcb -xcb-xlib -system-freetype ``` --- ### **总结** 通过路径验证、源码完整性检查和权限修正,应该可以解决`configure`脚本缺失的问题。如果仍有问题,建议提供`ls -l ~/Qt/`的输出以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SaberTimo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值