Qt标准对话框之QFileDialog

原文:http://devbean.blog.51cto.com/448512/213414/

《Qt学习之路》已经写到了第15篇,然而现在再写下去却有点困难,原因是当初并没有想到会连续的写下去,因此并没有很好的计划这些内容究竟该怎样去写。虽然前面说过,本教程主要线路参考《C++ Gui Programming with Qt 4, 2nd Edition》,然而最近的章节由于原文是一个比较完整的项目而有所改变,因此现在不知道该从何写起。
 
我并不打算介绍很多组件的使用,因为Qt有很多组件,各种组件用法众多,根本不可能介绍完,只能把API放在手边,边用边查。所以,对于很多组件我只是简单的介绍一下,具体用法还请自行查找(确切地说,我知道的也并不多,很多时候还是要到API里面去找)。
 
下面还是按照我们的进度,从Qt的标准对话框开始说起。所谓标准对话框,其实就是Qt内置的一些对话框,比如文件选择、颜色选择等等。今天首先介绍一下QFileDialog。
 
QFileDialog是Qt中用于文件打开和保存的对话框,相当于Swing里面的JFileChooser。下面打开我们前面使用的工程。我们已经很有先见之明的写好了一个打开的action,还记得前面的代码吗?当时,我们只是弹出了一个消息对话框(这也是一种标准对话框哦~)用于告知这个信号槽已经联通,现在我们要写真正的打开代码了!
 
修改MainWindow的open函数:
 
void MainWindow::open() 

        QString path = QFileDialog::getOpenFileName( this, tr( "Open Image"),  ".", tr( "Image Files(*.jpg *.png)")); 
         if(path.length() == 0) { 
                QMessageBox::information(NULL, tr( "Path"), tr( "You didn't select any files.")); 
        }  else { 
                QMessageBox::information(NULL, tr( "Path"), tr( "You selected ") + path); 
        } 
}
 
编译之前别忘记include QFileDialog哦!然后运行一下吧!点击打开按钮,就会弹出打开对话框,然后选择文件或者直接点击取消,会有相应的消息提示。
 
QFileDialog提供了很多静态函数,用于获取用户选择的文件。这里我们使用的是getOpenFileName(), 也就是“获取打开文件名”,你也可以查看API找到更多的函数使用。不过,这个函数的参数蛮长的,而且类型都是QString,并不好记。考虑到这种情况,Qt提供了另外的写法:
 
        QFileDialog *fileDialog =  new QFileDialog( this); 
        fileDialog->setWindowTitle(tr( "Open Image")); 
        fileDialog->setDirectory( "."); 
        fileDialog->setFilter(tr( "Image Files(*.jpg *.png)")); 
         if(fileDialog->exec() == QDialog::Accepted) { 
                QString path = fileDialog->selectedFiles()[0]; 
                QMessageBox::information(NULL, tr( "Path"), tr( "You selected ") + path); 
        }  else { 
                QMessageBox::information(NULL, tr( "Path"), tr( "You didn't select any files.")); 
        }
 
不过,这两种写法虽然功能差别不大,但是弹出的对话框却并不一样。getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框,而QFileDialog提供的始终是Qt自己绘制的对话框(还记得前面说过,Qt的组件和Swing类似,也是自己绘制的,而不都是调用系统资源API)。
 
为了说明QFileDialog::getOpenFileName()函数的用法,还是先把函数签名放在这里:
 
QString QFileDialog::getOpenFileName (
          QWidget * parent = 0,
           const QString & caption = QString(),
           const QString & dir = QString(),
           const QString & filter = QString(),
          QString * selectedFilter = 0,
          Options options = 0 )
 
第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;
 
第二个参数caption,是对话框的标题;
 
第三个参数dir,是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如"C:\\"等;
 
第四个参数filter,是对话框的后缀名过滤器,比如我们使用"Image Files(*.jpg *.png)"就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用";;"分割,比如"JPEG Files(*.jpg);;PNG Files(*.png)";
 
第五个参数selectedFilter,是默认选择的过滤器;
 
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
 
如果我要想选择多个文件怎么办呢?Qt提供了getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放QString的List,也就是STL中的list<string>。
 
好了,我们已经能够选择打开文件了。保存也是类似的,QFileDialog类也提供了保存对话框的函数getSaveFileName,具体使用还是请查阅API。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt6对话框QFileDialog是用于在Qt6应用程序中打开和保存文件的对话框。根据引用[1]和引用的内容,我们可以使用以下两种方式来实现对话框的使用: 方式一:使用静态函数QFileDialog::getOpenFileName() 可以通过以下代码示例使用静态函数QFileDialog::getOpenFileName()来实现: ```cpp QString fileName = QFileDialog::getOpenFileName(this, tr("文件打开对话框"), "D:", tr("图片文件(*png *jpg)")); ``` 在这个示例中,我们通过调用静态函数QFileDialog::getOpenFileName()来实现文件的打开对话框。通过传递窗口的指针、对话框的标题、默认目录和文件过滤器等参数,我们可以获取用户选择的文件名。 方式二:创建QFileDialog对象来实现 可以通过以下代码示例创建QFileDialog对象来实现: ```cpp QFileDialog *filedialog = new QFileDialog(this);//创建文件对话框对象,父对象为this filedialog->setWindowTitle("Save");//设置对话框标题 filedialog->setAcceptMode(QFileDialog::AcceptSave);//设置对话框为保存模式 filedialog->setFileMode(QFileDialog::AnyFile);//设置文件对话框的模式 filedialog->setViewMode(QFileDialog::Detail);//设置文件视图模式为详细模式 filedialog->selectFile("data.txt");//设置初始选中的文件为“data.txt” filedialog->setFilter("*.csv;;*txt;;*.*");//设置文件过滤器 filedialog->selectNameFilter("*.csv");//设置初始选择的文件类型 if (filedialog->exec() == QFileDialog::AcceptSave) { QString path = filedialog->selectedFiles()[0]; QFile file(path); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QString filePathToRead = "test.txt";//已存在的文件test.txt QFile readFile(filePathToRead); if (readFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&readFile); QTextStream out(&file); out << in.readAll(); readFile.close(); file.close(); } } } ``` 在这个示例中,我们通过创建QFileDialog对象,设置对话框的标题、模式、视图模式、初始选中的文件、文件过滤器等属性来实现文件的保存对话框。然后,通过调用exec()函数来显示对话框,并根据用户的选择进行相应的操作。 以上是两种实现Qt6对话框QFileDialog的方式,你可以根据需要选择其中一种方式来在Qt6应用程序中使用QFileDialog

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值