qfiledialog文件过滤_QFileDialog对话框

本文介绍了如何在Qt中利用QFileDialog对话框实现文件选择功能,包括打开、保存、选择目录以及设置文件过滤器,允许用户按特定类型选择文件。
摘要由CSDN通过智能技术生成

来自

QFileDialog对话框

可以弹出QFileDialog对话框让用户输入文件名或者路径,它可以限制用户只能选择已经存在的文件,,也可以允许用户输入一个新的文件名,此外,使用过滤器,则只能选择符合特殊标准的文件名。

ShowFile Header

1 /* showfile.h */

2 #ifndef SHOWFILE_H

3 #define SHOWFILE_H

4

5 #include

6 #include

7 #include

8

9 class ShowFile: public QWidget

10 {

11 Q_OBJECT

12 public:

13 ShowFile(QWidget *parent=0,const char *name=0);

14 private:

15 QLabel *filelabel;

16 QString filename;

17 private slots:

18 void popupOpen();

19 void popupSave();

20 void popupDirectory();

21 void popupFilter();

22 };

23

24 #endif

这个头文件定义了ShowFile类,这个类包含了当前文件名或者路径名,以及将要显示它的QLabel部件,定义了4个slot方法,其中每一个都和一个按钮相连,按钮将用不同的方式弹出一个QFileDialog对话框。带有标题和按钮的主窗口。

ShowFile

1 /* showfile.cpp */

2 #include

3 #include

4 #include

5 #include

6 #include “showfile.h”

7

8 int main(int argc,char **argv)

9 {

10 KApplication app(argc,argv,”showfile”);

11 ShowFile showfile;

12 showfile.show();

13 app.setMainWidget(&showfile);

14 return(app.exec());

15 }

16 ShowFile::ShowFile(QWidget *parent,const char *name)

17 : QWidget(parent,name)

18 {

19 QPushButton *button;

20 QVBoxLayout *box = new QVBoxLayout(this,0,3);

21

22 filelabel = new QLabel(“”,this);

23 filelabel->setAlignment(Qt::AlignHCenter);

24 box->addWidget(filelabel);

25

26 button = new QPushButton(“Select File to Open”,this);

27 box->addWidget(button);

28 connect(button,SIGNAL(clicked()),

29 this,SLOT(popupOpen()));

30

31 button = new QPushButton(“Select Save File”,this);

32 box->addWidget(button);

33 connect(button,SIGNAL(clicked()),

34 this,SLOT(popupSave()));

35

36 button = new QPushButton(“Select Directory”,this);

37 box->addWidget(button);

38 connect(button,SIGNAL(clicked()),

39 this,SLOT(popupDirectory()));

40

41 button = new QPushButton(“Filter Selection”,this);

42 box->addWidget(button);

43 connect(button,SIGNAL(clicked()),

44 this,SLOT(popupFilter()));

45

46 resize(10,10);

47 box->activate();

48 }

49 void ShowFile::popupOpen()

50 {

51 QString name = QFileDialog::getOpenFileName(“”,

52 NULL,this);

53 if(!name.isEmpty()) {

54 filename = name;

55 filelabel->setText(filename);

56 }

57 }

58 void ShowFile::popupSave()

59 {

60 QString name = QFileDialog::getSaveFileName(filename,

61 NULL,this);

62 if(!name.isEmpty()) {

63 filename = name;

64 filelabel->setText(filename);

65 }

66 }

67 void ShowFile::popupDirectory()

68 {

69 QString name = QFileDialog::getExistingDirectory();

70 if(!name.isEmpty()) {

71 filename = name;

72 filelabel->setText(filename);

73 }

74 }

75 void ShowFile::popupFilter()

76 {

77 QString filter =

78 “All (*)\n”

79 “C Source (*.c *.cc *.cpp *.cxx)\n”

80 “C Header (*.h)\n”

81 “Text (*.txt)\n”

82 “HTML (*.html *.shtml *.HTML *.htm)”;

83 QString name = QFileDialog::getOpenFileName(“”,

84 filter,this);

85 if(!name.isEmpty()) {

86 filename = name;

87 filelabel->setText(filename);

88 }

89 }

第8行到第15行是主程序,其中完成了应用程序初始化,然后创建并且显示ShowFile窗口。第16行开始的构造函数,构造了一个部件,它在一个竖直框中包含了一个标签和4个按钮。标签被用来显示上一次选择的文件或者路径。每个按钮都和一个slot连接起来,这个slot将创建一个QFileDialog对象,然后返回用户输入的结果。4种存在方式都使用了同样的显示格式,但标题栏的标题和按钮操作有一些不同。

第49行开始的名为popupOpen()的slot打开一个QFileDialog窗口,使得用户可以选择已经存在的文件名。第51行的静态函数调用getOpenFileName()创建了这个对话框。第一个参数(在这个例子中,是一个程度为零的字符串)可以是建议用户去选择的一个文件的完整路径名。如果没有指定文件名,那么对话框打开到这个应用程序上一次处理的路径位置,或者通过默认设置,打开到当前路径。只要窗口中选择了一个文件,那么按钮将把自己的文本改成OK,允许用户选择这个文件。

第58行开始的名为popupSave()的slot打开一个QFileDialog窗口,使得用户可以选择一个已经存在的文件或者输入新文件的名字。第60行的调用创建了这个对话框,传送给构造函数的第一个参数,是上一次返回的文件名,这个文件成为窗口中显示的当前选择文件。

第67行名为popupDirectory()的slot使用QFileDialog来选择路径。在这种方式中,对话框只返回被选择的路径名。如果用户选择了一个文件名,那么这个文件名将被去掉,只返回这个文件的路径名。

第75行名为popupFilter()的slot指定一组文件名过滤器,过滤器是一组文件后缀名的集合,用来选择哪些文件可以在窗口中显示。这些过滤器都是从第77行开始以一个字符串形式定义的。文件后缀以索引的形式组织起来,定义一个索引时,索引名称后面要用括号括上有效文件的后缀,在括号中,不同后缀之间用空格间隔开。不同的索引用换行符"\n"分隔开来,或者,如果愿意的话,也可以使用一对分号(";;")。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值