这一节学习一下QT中怎样弹出系统的选择文件夹对话框,并获取选择的文件夹名称。

经查询,代码如下:

QString dirpath = QFileDialog::getExistingDirectory(this, "选择目录", "./", QFileDialog::ShowDirsOnly);

当然,要正常使用这个还需要:

#include <QFileDialog>

大概参数大家应该能看懂,我就不解释了,它弹出的对话框是这样的:

qt 配置文件设计 选择文件夹对话框(1)

选择文件夹对话框

然后我们检查一下返回值是不是空,如果不是空,就将它显示到我们的lineEdit中:

void MainWindow::on_pushButton_2_clicked() { //点击“浏览”按钮时,调用系统的选择文件夹对话框,来选择一个已存在的文件夹。 QString dirpath = QFileDialog::getExistingDirectory(this, "选择目录", "./", QFileDialog::ShowDirsOnly); if(!dirpath.isEmpty()){ //如果返回的路径不是空,就设置一下lineEdit控件。 ui->le_DirPath->setText(dirpath); //保存到磁盘中,下次启动用 saveConfig(); } }

看到saveConfig()了没?这是下面要讲的。

看,选好路径点击确认返回后,lineEdit中就显示出文件夹来了。

qt 配置文件设计 选择文件夹对话框(2)

选择文件夹成功

但是不知道各位有没有发现,路径分割符是"/",而在Windows中正常是像"c:\xxx\xxx"这个样子才对,是用"\"号。而是在linux和MAC之类的平台上才用"/"号。是不是又开始头疼了?

不用头疼,Windows其实也支持用"/"做为路径分隔符的,我们将计就计就行了。

我们要在用户选择了文件夹以后,将文件夹保存到一个配置文件中,然后在下次程序启动的时候就把它读出来,这样就省得程序每次启动时都要选择一次文件夹。

还好QT中提供了读写ini文件的类,而且该类在Windows平台下还能读写注册表。唉,现在写个程序好幸福啊,什么东西都给封装好了,再想想以前在dos下用TC2.0时。。。都是泪啊!

要使用QT的配置文件读写类,需要:

#include <QSettings>

基本使用方法如下:

//qt写入ini配置文件 QSettings settings("Option.ini",QSettings::IniFormat); //用ini模式打开Option.ini settings.beginGroup("DevOption"); //选择节(ini文件里分为好多节) settings.setValue("mainFun",25); //写入数据 settings.setValue("subFun",40); settings.setValue("service",1); settings.endGroup(); //结束这个节的操作 //读取ini QSettings settingsread("Option.ini",QSettings::IniFormat); int mainFun = settingsread.value("DevOption/mainFun").toInt(); //获取ini中的一个配置,注意节和字段名是连着的,用/号分割 QString service = settingsread.value("DevOption/service").toString();

怎么样?使用起来很简单吧。

接下来就该写代码了,在mainwindow.h里声明一个私有变量,用来存配置文件的名称:

QString configFileName = "config.ini";

这个文件我没写路径,那么它将会和我们的exe文件在一起。

然后定义两个函数,一个用来读配置,一个用来写配置:

void MainWindow::loadConfig(){ QSettings cfg(configFileName, QSettings::IniFormat); QString dirPath = cfg.value("DirPath/DirName").toString(); ui->le_DirPath->setText(dirPath); } void MainWindow::saveConfig(){ QSettings cfg(configFileName, QSettings::IniFormat); cfg.beginGroup("DirPath"); cfg.setValue("DirName", ui->le_DirPath->text()); cfg.endGroup(); }

是不是很简单。

然后我们在事件过滤函数(上一节建了)里检测到窗体显示事件时读一下配置:

bool MainWindow::eventFilter(QObject *watched, QEvent *event) { if( watched == this ) { //窗口激活,变为活动的窗口 if(QEvent::WindowActivate == event->type()){ pasteUrlWhenActive(); return true; } //窗体从无到有显示的时候。 if(QEvent::Show == event->type()){ //载入配置 loadConfig(); return true; } return false ; } return false ; }

再在选择好目录时写一下配置,上上面的代码里有,这里就不再放代码了。

然后我们看一下保存的ini文件内部啥样子:

qt 配置文件设计 选择文件夹对话框(3)

ini配置文件内容

怎么样,很标准吧。

,