目录
1 文件目录操作相关的类
2 实例概述
2.1 实例功能
2.2 信号发射者信息的获取
3 QCoreApplication类
4 QFile类
5 QFilelnfo类
6 QDir类
7 QTemporaryDir和QTemporaryFiIe
8 QFiIeSystemWatcher类
1 文件目录操作相关的类
- QCoreApplication:用于提取应用程序路径、程序名等文件信息。
- QFile:除了打开文件操作外,QFile还有复制文件、删除文件等功能。
- QFileInfo:用于提取文件的信息,包括路径、文件名、后缀等。
- QDir:用于提取目录或文件信息,获取一个目录下的文件或目录列表,创建或删除目录和 文件,文件重命名等操作。
- QTemporaryDir和QTemporaryFile:用于创建临时目录和临时文件。
- QFileSystemWatcher:文件和目录监听类,监听目录下文件的添加、删除等变化,监听文 件修改变化。
2 实例概述
2.1 实例功能
2.2 信号发射者信息的获取
void Dialog::on_pushButton_30_clicked()
{//QFileInfo.basename()QPushButton *btn = (QPushButton*) sender();ui->plainTextEdit->appendPlainText(btn->text());ui->plainTextEdit->appendPlainText(btn->toolTip());QFileInfo fileInfo(ui->editFile->text());QString str=fileInfo.baseName();ui->plainTextEdit->appendPlainText(str+"\n");
}
代码的前3行是用于获取按钮对象,并显示按钮的text和toolTip文字。
这里用到了QObject::sender()函数,该函数用于在槽函数里获取发射信号的对象。因为这个函数是按钮的clicked()信号的槽函数,所以,sender()获取的信号发射对象就是这个按钮。然后将此对象转换为QPushButton类型变量btn,就可以访问btn的text()和toolTip()函数了。
这种方法的优点是没有出现对象的ObjectName,这3行代码可以在任何一个按钮的clicked()信号槽函数里出现。如果是直接用按钮的ObjectName,则每个按钮里的代码里需要修改名称。本实例有几十个按钮,工作量很大,也容易遗漏了修改名称。
对上面的代码还可以进一步优化,因为每个按钮的槽函数里都要重复这3行代码,将其编写为一个函数,然后在按钮的响应代码里调用。优化后的代码如下:
void Dialog::on_pushButton_30_clicked()
{//QFileInfo.basename()showBtnInfo(sender());QFileInfo fileInfo(ui->editFile->text());QString str=fileInfo.baseName();ui->plainTextEdit->appendPlainText(str+"\n");
}void Dialog::showBtnInfo(QObject *btn)
{ //显示btn的信息QPushButton *theBtn =static_cast<QPushButton*>(btn);ui->plainTextEdit->appendPlainText(theBtn->text());ui->plainTextEdit->appendPlainText(theBtn->toolTip()+"\n");
}
3 QCoreApplication类
4 QFile类
void Dialog::on_pushButton_51_clicked()
{showBtnInfo(sender());QString sous=ui->editFile->text(); //源文件bool the=QFile::exists(sous);if(the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}
5 QFilelnfo类
void Dialog::on_pushButton_50_clicked()
{//QFile::rename()showBtnInfo(sender());QString sous=ui->editFile->text(); //源文件QFileInfo fileInfo(sous);//源文件信息QString newFile=fileInfo.path()+"/"+fileInfo.baseName()+".XYZ"; //更改文件后缀为".XYZ"QFile::rename(sous,newFile); //重命名文件ui->plainTextEdit->appendPlainText("源文件:"+sous);ui->plainTextEdit->appendPlainText("重命名为:"+newFile+"\n");
}
6 QDir类
- QDir::AllDirs:列出所有目录名。
- QDir::Files:列出所有文件。
- QDir::Drives:列出所有盘符(Unix系统下无效)。
- QDir::NoDotAndDotDot:不列出特殊的符号,如"."和".."。
- QDir::AllEntries:列出目录下所有项目。
void Dialog::on_pushButton_11_clicked()
{//列出子目录showBtnInfo(sender());QDir dir(ui->editDir->text());QStringList strList=dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);ui->plainTextEdit->appendPlainText("所选目录下的所有目录:");for(int i=0;i<strList.count();i++)ui->plainTextEdit->appendPlainText(strList.at(i));ui->plainTextEdit->appendPlainText("\n");
}
列出一个目录下所有文件的程序如下:
void Dialog::on_pushButton_17_clicked()
{//列出所有文件showBtnInfo(sender());QDir dir(ui->editDir->text());QStringList strList=dir.entryList(QDir::Files);ui->plainTextEdit->appendPlainText("所选目录下的所有文件:");for(int i=0;i<strList.count();i++)ui->plainTextEdit->appendPlainText(strList.at(i));ui->plainTextEdit->appendPlainText("\n");
}
7 QTemporaryDir和QTemporaryFiIe
8 QFiIeSystemWatcher类
void QFileSystemWatcher::directoryChanged(const QString &path)void QFileSystemWatcher::fileChanged(const QString &path)
private:QFileSystemWatcher fileWatcher;
public slots:void on_directoryChanged(const QString path);void on_fileChanged(const QString path);
两个槽函数仅是显示传递的参数,并显示提示文字,其代码如下:
void Dialog::on_directoryChanged(const QString path)
{ //directoryChanged()信号的槽函数ui->plainTextEdit->appendPlainText(path);ui->plainTextEdit->appendPlainText("目录发生了变化\n");
}void Dialog::on_fileChanged(const QString path)
{//fileChanged()信号的槽函数ui->plainTextEdit->appendPlainText(path);ui->plainTextEdit->appendPlainText("文件发生了变化\n");
}
void Dialog::on_pushButton_46_clicked()
{//开始监听,addPath()showBtnInfo(sender());ui->plainTextEdit->appendPlainText("监听目录:"+ui->editDir->text()+"\n");fileWatcher.addPath(ui->editDir->text());//添加监听目录fileWatcher.addPath(ui->editFile->text());//添加监听文件QObject::connect(&fileWatcher,&QFileSystemWatcher::directoryChanged,this,&Dialog::on_directoryChanged); //directoryChangedQObject::connect(&fileWatcher,&QFileSystemWatcher::fileChanged,this,&Dialog::on_fileChanged); //fileChangedthis,&Dialog::on_fileChanged); //fileChanged
}void Dialog::on_pushButton_47_clicked()
{//停止监听,removePath()showBtnInfo(sender());ui->plainTextEdit->appendPlainText("停止监听目录:"+ui->editDir->text()+"\n");fileWatcher.removePath(ui->editDir->text());//fileWatcher.removePath(ui->editFile->text());//QObject::disconnect(&fileWatcher,&QFileSystemWatcher::directoryChanged,this,&Dialog::on_directoryChanged); //directoryChangedQObject::disconnect(&fileWatcher,&QFileSystemWatcher::fileChanged,this,&Dialog::on_fileChanged); //fileChanged
}
采用addPath()函数添加目录和文件后,将信号和槽函数关联起来,开始监听。
停止监听时,用removePath()函数移除监听的目录和文件,并用disconnect()解除信号与槽的关联。