四时宝库

程序员的知识宝库

QT学习:选择文件夹对话框,ini配置文件读写

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

经查询,代码如下:

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

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

Bash
#include <QFileDialog>

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

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

Bash
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的配置文件读写类,需要:

Bash
#include <QSettings>

基本使用方法如下:

Bash
//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里声明一个私有变量,用来存配置文件的名称:

Bash
QString configFileName = "config.ini";

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

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

Bash
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();
}

是不是很简单。

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

Bash
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文件内部啥样子:

怎么样,很标准吧。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接