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"分隔开来,或者,如果愿意的话,也可以使用一对分号(";;")。
原文: http://linux.chinaunix.net/techdoc/desktop/2006/03/14/929039.shtml