这一节学习一下QT中怎样弹出系统的选择文件夹对话框,并获取选择的文件夹名称。
经查询,代码如下:
QString dirpath = QFileDialog::getExistingDirectory(this, "选择目录", "./", QFileDialog::ShowDirsOnly);
当然,要正常使用这个还需要:
#include <QFileDialog>
大概参数大家应该能看懂,我就不解释了,它弹出的对话框是这样的:
然后我们检查一下返回值是不是空,如果不是空,就将它显示到我们的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中就显示出文件夹来了。
但是不知道各位有没有发现,路径分割符是"/",而在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文件内部啥样子:
怎么样,很标准吧。