Qt:QtFileDialog打开文件选择对话框选择文件

  Qt提供了完整的文件选择对话框,并对此进行高度封装,我们只需要调用一个函数就可以对文件的选择,听起来简直不可思议,在QFileDialog类中有一个静态成员——

static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());

parent是打开文件选择框的窗体,即所在ui;
caption 是对话框的标题;
dir是打开文件的默认目录;
filter通过QString定义了文件过滤规则;
seletedFilter 是默认的文件过滤规则,不是特别清楚和filter的关系,猜测应该是当filter失效时,采用的默认规则;
options 是选择对话框属性的参数,如设置文件只读、显示或不显示文件夹等;

最重要的参数还是filter,控制了选择文件的规则,通过形如如下字符串定义——


"images(*.png *jpeg *bmp);;text files(*.txt *.doc *.docx);;video files(*.avi *.mp4 *.wmv);;All files(*.*)"

其中,imagestext files是要选文件的一类统称,可以自定义,后面紧跟的括号 定义了具体的文件规则,* 表示全选,后面的紧跟着的文件格式后缀表示过滤类型,如果要全选类型,则用*代替。如果要选择多种类型,那么用;;隔开即可。下面看具体实现——

void QFun::on_testButton_clicked()
{
	QString fileName = QFileDialog::getOpenFileName(
		this, 
		tr("open a file."),
		"D:/", 
		tr("images(*.png *jpeg *bmp);;video files(*.avi *.mp4 *.wmv);;All files(*.*)"));
	if (fileName.isEmpty()) {
		QMessageBox::warning(this, "Warning!", "Failed to open the video!");
	}
	else {
		Test *t = new Test();
		t->show();
		Mat cover = imread(fileName.toStdString(), IMREAD_COLOR);
		t->setLabelText(fileName);
		cvtColor(cover, cover, COLOR_BGR2RGB);
		QImage image = QImage((const uchar*)cover.data,
			cover.cols, cover.rows, cover.step,
			QImage::Format_RGB888);
		t->setLabelFrame(image);
	}
}

我在项目的一个按钮中测试了这个功能,通过打开一个新的对话框来打开图片。
在这里插入图片描述
可以看到,默认路径和文件过滤规则如函数中定义的一样,最后效果——
在这里插入图片描述

发布了222 篇原创文章 · 获赞 558 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/CV_Jason/article/details/89359191