主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QFileDialog类提供了允许用户选择文件或者目录的对话框。 详情请见……
#include <qfiledialog.h>
继承了QDialog。
QFileDialog类允许用户在它们的文件系统上遍历来选择一个或多个文件或目录。
最简单的方式是使用静态函数来创建一个QFileDialog。在Windows上,这些静态函数将调用本地Windows文件对话框并且在Mac OS X上,这些静态函数将调用本地Mac OS X文件对话框。
QString s = QFileDialog::getOpenFileName( "/home", "Images (*.png *.xpm *.jpg)", this, "open file dialog" "Choose a file" );
在上面的实例中,一个模式对话框被使用静态函数来创建。开始目录被设置为“/home”。文件过滤器被设置为“Images (*.png *.xpm *.jpg)”。文件对话框的父对象被设置为this并且它被给定一个标识名称——“open file dialog”。文件对话框上面的标题被设置为“Choose a file”。
你可以不使用静态函数创建你自己的QFileDialog。通过调用setMode(),你可以设置可以从QFileDialog返回什么。
QFileDialog* fd = new QFileDialog( this, "file dialog", TRUE ); fd->setMode( QFileDialog::AnyFile );
在上面的实例中,文件对话框的模式被设置为AnyFile,也就是说用户可以设置任何文件或者甚至指定一个不存在的文件。这个模式对于创建一个“File Save As”文件对话框。如果用户必须选择存在的文件,请使用ExistingFile,或者如果可以选择目录,请使用Directory。(模式的完整列表请参考QFileDialog::Mode枚举变量。)
你可以通过mode()重新得到对话框的模式。也可以使用setFilter()来设置对话框的文件过滤器。
fd->setFilter( "Images (*.png *.xpm *.jpg)" );
在上面的实例中,过滤器被设置为“Images (*.png *.xpm *.jpg)”,这也就是说只有扩展名为png、xpm或jpg的文件可以被显示在QFileDialog中。你可以使用setFilters()来设置几个过滤器并且使用addFilter()来添加额外的过滤器。使用setSelectedFilter()来选择你给定的其中一个作为文件对话框默认过滤器。只用用户改变过滤器,filterSelected()信号就被发射。
文件对话框有两种视图模式,QFileDialog::List可以简单地列出文件和目录名称并且QFileDialog::Detail会在旁边显示额外的信息,例如,文件大小。
fd->setViewMode( QFileDialog::Detail );
在创建你自己的文件对话框时最后需要的最后重要的函数是selectedFile()。
QString fileName; if ( fd->exec() == QDialog::Accepted ) fileName = fd->selectedFile();
在上面的实例中,模式对话框被创建并被显示。如果用户点击OK,然后他们选择的文件被放入fileName中。
如果你使用ExistingFiles模式,那么你将需要使用selectedFiles()在一个QStringList中返回选择的文件。
对话框工作目录可以使用setDir()来设置。隐藏文件的显示控制可以使用setShowHiddenFiles()。对话框可以被强制使用rereadDir()重新读取目录并且使用resortDir()来重新排列目录。可以使用selectAll()来选择当前目录下的所有文件。
QFileDialog中使用两种预览窗口部件:内容预览窗口部件和信息预览窗口部件。它们的创建和使用方法相同,除了函数名不同以外,例如,setContentsPreview()和setInfoPreview()。
预览窗口部件被放置在QFileDialog中,让用户能够看到文件的内容或者有关文件的信息。
class Preview : public QLabel, public QFilePreview { public: Preview( QWidget *parent=0 ) : QLabel( parent ) {} void previewUrl( const QUrl &u ) { QString path = u.path(); QPixmap pix( path ); if ( pix.isNull() ) setText( "This is not a pixmap" ); else setPixmap( pix ); } };
在上面的代码段中,我们创建一个继承与QLabel和QFilePreview的预览窗口部件。文件预览窗口部件必须从QFilePreview继承。
在这个类中我们重新实现了QFilePreview::previewUrl(),这是我们决定当文件被选择时发生什么。在上面的实例中,如果它是有效的像素映射,我们只是显示文件的预览。这里是文件对话框如何使用预览窗口部件的:
Preview* p = new Preview; QFileDialog* fd = new QFileDialog( this ); fd->setContentsPreviewEnabled( TRUE ); fd->setContentsPreview( p, p ); fd->setPreviewMode( QFileDialog::Contents ); fd->show();
第一行创建了我们的预览窗口部件的实例。然后我们创建我们的文件对话框并且调用setContentsPreviewEnabled( TRUE ),这告诉文件对话框预览当前选择文件的内容。然后我们调用setContentsPreview()——注意我们传递同样的预览窗口部件两次。最后,在显示文件对话框之前,我们调用setPreviewMode()来设置Contents为用户选择文件的预览模式来显示内容预览。
如果你创建另一个预览窗口部件来显示有关文件的信息,那么像内容预览窗口部件一样的方式来创建它并且调用setInfoPreviewEnabled()和setInfoPreview()。然后用户将能够在两种预览模式中切换。
有关创建QFilePreview窗口部件的更多信息,请参考QFilePreview。
也可以参考对话框类。
这个枚举变量用来表明用户可以在文件对话框中选择什么,也就是如果用户点击OK,这个对话框返回什么。
请参考setMode()。
这个枚举变量描述的是文件对话框的预览模式。
请参考setPreviewMode()、setContentsPreview()和setInfoPreview()。
这个枚举变量描述的是文件对话框的视图模式,也就是说关于每个文件都显示什么。
请参考setViewMode()。
如果dirName被指定,那么它将被作为对话框的工作目录,比如,当对话框出现时,它将被作为被显示的目录。如果filter被指定,它将会被用作对话框的文件过滤器。
QFileDialog* fd = new QFileDialog( this ); fd->addFilter( "Images (*.png *.jpg *.xpm)" ); fd->show();
在上面的实例中,一个文件对话框被创建,并且文件过滤器“Images (*.png *.jpg *.xpm)”被添加并且它被设置为当前过滤器。初始过滤器“All Files (*)”仍然是有效的。
也可以参考setFilter()和setFilters()。
也可以参考addRightWidget()、addWidgets()和addToolButton()。
也可以参考addLeftWidget()、addWidgets()和addToolButton()。
也可以参考addWidgets()、addLeftWidget()和addRightWidget()。
MyFileDialog::MyFileDialog( QWidget* parent, const char* name ) : QFileDialog( parent, name ) { QLabel* label = new QLabel( "Added widgets", this ); QLineEdit* lineedit = new QLineEdit( this ); QToolButton* toolbutton = new QToolButton( this ); addWidgets( label, lineedit, toolbutton ); }
如果你不想添加任何其中一个窗口部件,就在那个窗口部件的位置上传递0。
每一次你调用这个函数,一行新的窗口部件被添加到文件对话框的底部。
也可以参考addToolButton()、addLeftWidget()和addRightWidget()。
QDir指针的所有权被传递给被调用者,所以你必须在调用者不需要它的时候删除它。
也可以参考setDir()。
当用户进入一个目录时,这个信号被发射。
也可以参考dir()。
返回文件对话框的工作目录。详细情况请参考“dirPath”属性。
当用户高亮显示一个文件时,这个信号被发射。
也可以参考fileSelected()和filesSelected()。
当用户选择一个文件时,这个信号被发射。
也可以参考filesSelected()、fileHighlighted()和selectedFile。
当用户在ExistingFiles模式下选择一个或多个文件时,这个信号被发射。
也可以参考fileSelected()、fileHighlighted()和selectedFiles。
当用户选择一个过滤器时,这个信号被发射。
也可以参考selectedFilter。
QString s = QFileDialog::getExistingDirectory( "/home", this, "get existing directory" "Choose a directory", TRUE );
这个函数创建了一个父对象为parent、名称为name的模式文件对话框。如果父对象不为0,这个对话框将被显示在它的父对象上面的中间。
对话框的工作目录被设置为dir,并且标题被设置为caption。它们当中的任何一个都可以是QString::null,在这种情况下,当前目录和默认标题将被分别使用。
如果dirOnly为真,那么只有目录被显示在文件对话框中,否则目录和文件都将被显示。
在Unix/X11下,文件对话框的通常行为是解析并跟踪符号连接。例如,如果/usr/tmp是/var/tmp的符号连接,那么在进入/usr/tmp之后,文件对话框将改变到/var/tmp。如果resolveSymlinks为假,文件对话框将把符号连接看作通常的目录。
也可以参考getOpenFileName()、getOpenFileNames()和getSaveFileName()。
QString s = QFileDialog::getOpenFileName( "/home", "Images (*.png *.xpm *.jpg)", this, "open file dialog", "Choose a file to open" );
这个函数创建了一个父对象为parent、名称为name的模式文件对话框。如果父对象不为0,这个对话框将被显示在它的父对象上面的中间。
文件的工作目录将被设置为startWith。如果startWith包括一个文件名,这个文件将被选择。过滤器被设置为filter,这样只有匹配过滤器的文件才会被显示。被选择的过滤器被设置为selectedFilter。参数startWith、selectedFilter和filter可以为QString::null。
对话框的标题可以被设置为caption。如果caption没有被指定,那么将会有一个默认标题被使用。
在Windows和Mac OS X下,这个静态函数将使用本地文件对话框而不是QFileDialog,除非应用程序的风格被设置为本地风格以外的某种风格。
在Unix/X11下,文件对话框的通常行为是解析并跟踪符号连接。例如,如果/usr/tmp是/var/tmp的符号连接,那么在进入/usr/tmp之后,文件对话框将改变到/var/tmp。如果resolveSymlinks为假,文件对话框将把符号连接看作通常的目录。
也可以参考getOpenFileNames(), getSaveFileName() and getExistingDirectory().
实例:action/application.cpp、addressbook/mainwindow.cpp、application/application.cpp、chart/chartform.cpp、mdi/application.cpp、qwerty/qwerty.cpp和showimg/showimg.cpp。
QStringList files = QFileDialog::getOpenFileNames( "Images (*.png *.xpm *.jpg)", "/home", this, "open files dialog" "Select one or more files to open" );
这个函数创建了一个父对象为parent、名称为name的模式文件对话框。如果父对象不为0,这个对话框将被显示在它的父对象上面的中间。
文件的工作目录将被设置为dir。如果dir包括一个文件名,这个文件将被选择。过滤器被设置为filter,这样只有匹配过滤器的文件才会被显示。被选择的过滤器被设置为selectedFilter。参数dir、selectedFilter和filter可以为QString::null。
对话框的标题可以被设置为caption。如果caption没有被指定,那么将会有一个默认标题被使用。
在Windows和Mac OS X下,这个静态函数将使用本地文件对话框而不是QFileDialog,除非应用程序的风格被设置为本地风格以外的某种风格。
在Unix/X11下,文件对话框的通常行为是解析并跟踪符号连接。例如,如果/usr/tmp是/var/tmp的符号连接,那么在进入/usr/tmp之后,文件对话框将改变到/var/tmp。如果resolveSymlinks为假,文件对话框将把符号连接看作通常的目录。
注意如果你想遍历文件的列表,你应该在一个复制上进行遍历,例如:
QStringList list = files; QStringList::Iterator it = list.begin(); while( it != list.end() ) { myProcessing( *it ); ++it; }
也可以参考getOpenFileName()、getSaveFileName()和getExistingDirectory()。
这个函数创建了一个父对象为parent、名称为name的模式文件对话框。如果父对象不为0,这个对话框将被显示在它的父对象上面的中间。
QString s = QFileDialog::getSaveFileName( "/home", "Images (*.png *.xpm *.jpg)", this, "save file dialog" "Choose a filename to save under" );
文件的工作目录将被设置为startWith。如果startWith包括一个文件名,这个文件将被选择。过滤器被设置为filter,这样只有匹配过滤器的文件才会被显示。被选择的过滤器被设置为selectedFilter。参数startWith、selectedFilter和filter可以为QString::null。
对话框的标题可以被设置为caption。如果caption没有被指定,那么将会有一个默认标题被使用。
在Windows和Mac OS X下,这个静态函数将使用本地文件对话框而不是QFileDialog,除非应用程序的风格被设置为本地风格以外的某种风格。
在Unix/X11下,文件对话框的通常行为是解析并跟踪符号连接。例如,如果/usr/tmp是/var/tmp的符号连接,那么在进入/usr/tmp之后,文件对话框将改变到/var/tmp。如果resolveSymlinks为假,文件对话框将把符号连接看作通常的目录。
也可以参考getOpenFileName()、getOpenFileNames()和getExistingDirectory()。
实例:action/application.cpp、addressbook/mainwindow.cpp、application/application.cpp、chart/chartform.cpp、qmag/qmag.cpp、qwerty/qwerty.cpp和showimg/showimg.cpp。
也可以参考setIconProvider()和QFileIconProvider。
如果文件对话框提供当前选择文件的内容预览,返回真,否则返回假。详细情况请参考“contentsPreview”属性。
如果文件对话框提供当前选择文件的信息预览,返回真,否则返回假。详细情况请参考“infoPreview”属性。
Returns the file dialog's mode. See the "mode" property for details.
返回文件对话框的预览模式。详细情况请参考“previewMode”属性。
只有在如果目录的内容发生改变并且你想刷新文件对话框来反映这样的变化时,你才需要调用这个函数。
也可以参考resortDir()。
也可以参考rereadDir()。
返回被选择文件的名称。详细情况请参考“selectedFile”属性。
返回被选择文件的列表。详细情况请参考“selectedFiles”属性。
返回文件对话框中用户所选择的过滤器。详细情况请参考“selectedFilter”属性。
通常你需要创建一个继承QWidget和QFilePreview的预览窗口部件,所以你需要传递同一个窗口部件两次。
class Preview : public QLabel, public QFilePreview { public: Preview( QWidget *parent=0 ) : QLabel( parent ) {} void previewUrl( const QUrl &u ) { QString path = u.path(); QPixmap pix( path ); if ( pix.isNull() ) setText( "This is not a pixmap" ); else setPixmap( pix ); } }; //... int main( int argc, char** argv ) { Preview* p = new Preview; QFileDialog* fd = new QFileDialog( this ); fd->setContentsPreviewEnabled( TRUE ); fd->setContentsPreview( p, p ); fd->setPreviewMode( QFileDialog::Contents ); fd->show(); }
也可以参考contentsPreview、setInfoPreview()和previewMode。
实例:qdir/qdir.cpp。
设置文件对话框是否提供当前选择文件的内容预览。详细情况请参考“contentsPreview”属性。
也可以参考dir()。
设置文件对话框的工作目录是pathstr。
也可以参考dir()。
设置文件对话框中使用的过滤器为newFilter。
如果newFilter中包含一对包含一个或多个anything*something,由空格或者分号分隔的括号,那么只有其中被括号包含的内容会被作为过滤器。这也就是说下面这些调用方法都是相同的:
fd->setFilter( "All C++ files (*.cpp *.cc *.C *.cxx *.c++)" ); fd->setFilter( "*.cpp *.cc *.C *.cxx *.c++" ); fd->setFilter( "All C++ files (*.cpp;*.cc;*.C;*.cxx;*.c++)" ); fd->setFilter( "*.cpp;*.cc;*.C;*.cxx;*.c++" );
也可以参考setFilters()。
QString types("*.png;;*.xpm;;*.jpg"); QFileDialog fd = new QFileDialog( this ); fd->setFilters( types ); fd->show();
必须是以结束符结尾的字符串列表。
默认没有QFileIconProvider并且QFileDialog只为每一个目录绘制一个文件夹图标,而对文件则没有图标。
也可以参考QFileIconProvider和iconProvider()。
实例:showimg/main.cpp。
通常你需要创建一个继承QWidget和QFilePreview的预览窗口部件,所以你需要传递同一个窗口部件两次。
class Preview : public QLabel, public QFilePreview { public: Preview( QWidget *parent=0 ) : QLabel( parent ) {} void previewUrl( const QUrl &u ) { QString path = u.path(); QPixmap pix( path ); if ( pix.isNull() ) setText( "This is not a pixmap" ); else setText( "This is a pixmap" ); } }; //... int main( int argc, char** argv ) { Preview* p = new Preview; QFileDialog* fd = new QFileDialog( this ); fd->setInfoPreviewEnabled( TRUE ); fd->setInfoPreview( p, p ); fd->setPreviewMode( QFileDialog::Info ); fd->show(); }
也可以参考setContentsPreview()、infoPreview和previewMode。
设置文件对话框是否提供当前选择文件的信息预览。详细情况请参考“infoPreview”属性。
设置文件对话框的模式。详细情况请参考“mode”属性。
设置文件对话框的预览模式为m。详细情况请参考“previewMode”属性。
设置文件对话框中当前选择的过滤器为过滤器列表中的第n个过滤器。
也可以参考filterSelected()、selectedFilter、selectedFiles和selectedFile。
实例:qdir/qdir.cpp。
设置文件对话框中隐藏文件是否被显示为s。详细情况请参考“showHiddenFiles”属性。
也可以参考url()。
设置文件对话框的视图模式为m。详细情况请参考“viewMode”属性。
如果文件对话框中隐藏文件被显示,返回真,否则返回假。详细情况请参考“showHiddenFiles”属性。
也可以参考setUrl()。
实例:network/networkprotocol/view.cpp。
返回文件对话框的视图模式。详细情况请参考“viewMode”属性。
这个属性保存的是文件对话框是否提供当前选择文件的内容预览。
默认为假。
也可以参考setContentsPreview()和infoPreview。
通过setContentsPreviewEnabled()设置属性值并且通过isContentsPreviewEnabled()来获得属性值。
这个属性保存的是文件对话框的工作目录。
通过dirPath()来获得属性值。
这个属性保存的是文件对话框是否提供当前选择文件的信息预览。
默认为假。
通过setInfoPreviewEnabled()设置属性值并且通过isInfoPreviewEnabled()来获得属性值。
这个属性保存的是文件对话框的模式。
默认模式为ExistingFile。
通过setMode()设置属性值并且通过mode()来获得属性值。
这个属性保存的是文件的对话框的预览模式。
如果你设置这个模式为NoPreview之外的模式,你必须使用setInfoPreview()或者setContentsPreview()来设置这个对话框的预览窗口部件为你的预览窗口部件并且使用setInfoPreviewEnabled()或setContentsPreviewEnabled()来让预览窗口部件生效。
也可以参考infoPreview、contentsPreview和viewMode。
通过setPreviewMode()设置属性值并且通过previewMode()来获得属性值。
这个属性保存的是选择的文件的名称。
如果文件被选择,则selectedFile包含文件的名称和它的绝对路径,否则selectedFile为空。
也可以参考QString::isEmpty()、selectedFiles和selectedFilter。
通过selectedFile()来获得属性值。
这个属性保存的是选择的文件的列表。
如果有一个或多个文件被选择,selectedFiles包含这些文件的名称和它们的绝对路径。如果没有文件被选择或者模式不是ExistingFiles,selectedFiles是一个空列表。
如果模式为ExistingFile、Directory或DirectoryOnly,使用selectedFile()更方便。
注意,如果你想遍历这个列表,你应该遍历它的复制,例如:
QStringList list = myFileDialog.selectedFiles(); QStringList::Iterator it = list.begin(); while( it != list.end() ) { myProcessing( *it ); ++it; }
也可以参考selectedFile、selectedFilter和QValueList::empty()。
通过selectedFiles()来获得属性值。
这个属性保存的是文件对话框中用户选择文件的过滤器。
通过selectedFilter()来获得属性值。
也可以参考filterSelected()、selectedFiles和selectedFile。
这个属性保存的是文件对话框中隐藏文件是否显示。
默认是假,也就是不显示隐藏文件。
通过setShowHiddenFiles()设置属性值并且通过showHiddenFiles()来获得属性值。
这个属性保存的是文件对话框的视图模式。
如果你设置视图模式为Detail(默认),那么你将看到文件的详细情况,除了文件名之外,还有文件的大小和这个文件最近一次被修改的日期。
如果你设置视图模式为List,那么你将只会看到文件和文件夹的列表。
通过setViewMode()设置属性值并且通过viewMode()来获得属性值。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|