帮助文档中QFileDialog类简介:
The QFileDialog class provides a dialog that allow users to select files or directories.
翻译为:QFileDialog类提供一个对话框,允许用户选择文件和目录。
在这里,设计一个小程序利用到QFileDialog类,利用其打开某些文档,显示文档的属性:
其中QFileDialog的静态成员函数有很多。
这里使用到getOpenFileName()方法。
getOpenFileName()方法简介:
This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns a null string.
翻译为:这是一个很方便的静态函数,它返回一个被用户选择的存在的文件。如果用户按下取消,他会返回一个空的字符串。
帮助文档中getOpenFileName()方法举例:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"/home",tr("Images (*.png *.xpm *.jpg)"));
这个案例,它实现的功能是:
提供一个对话框,设置对话框的标题为“Open File”,打开的路径为“/home”,提供选择的后缀名有(Images (*.png *.xpm *.jpg)”) ,获取到选中的文件的文件
并且放在fileName中。
这里,我们打开Qt,新建一个项目,设计一个Ui如下:
实现的功能为:
在按下打开文件pushButton的时候,会有相应的对话框供我们选择,然后我们选择相应文件,会在主Ui中显示其相应的信息
具体步骤如下:
在mainwindow.h中添加私有槽:
private slots: void getFileInfoSlot();//用于获取当前文件的属性信息
在我们发出相应的信息之后,作出相应的反应。
在主窗口文件中添加相应的槽的内容:
void MainWindow::getFileInfoSlot(){}
第一步,当点击pushButton按钮的时候,弹出文件选择对话框,选择一个相应文件,获取到这个文件名:
QString fileName=QFileDialog::getOpenFileName(this,"打开文件",QDir::homePath()); if(fileName.isEmpty()) { QMessageBox::information(this,"提示","您没有选择文件"); return; }
得到一个文件名。
并且如果getOpenFileName()方法返回的是一个空的字符串的话,那么弹出一个消息对话框。并且返回。
这里,需要使用到一个新类:<QFileInfo>
在帮助文档中关于QFileInfo类有如下介绍:
The QFileInfo class provides system-independent file information.
翻译为:QFileInfo类提供系统的文件信息。
QFileInfo info(fileName);
定义一个QFileInfo类的对象info,并且在其构造函数中,传入参数fileName。这里的fileName是我们在打开对话框之后,得到的一个文件名。
注:fileName是一个带有绝对路径的文件名。
QFileInfo的构造函数中,帮助文档有如下解释:
Constructs a new QFileInfo that gives information about the given file. The file can also include an absolute or relative path.
构造一个新的QFileInfo,它包含已给文件的信息。这个文件可以包含绝对或相对路径。
然后使用:
qint64 QFileInfo::size() const
帮助文档中解释如下:
Returns the file size in bytes. If the file does not exist or cannot be fetched, 0 is returned.
翻译为:以二进制的方式返回文件的大小,如果这个文件不存在或者没有获取到,则返回0。
ui->filesizeLineEdit->setText(QString::number(info.size()));
将得到的文件的大小,转换格式之后,放在一个LineEdit中。
获取文件的创建时间:
QDateTime create = info.created();
这里利用到了QFileInfo的created()方法。
created方法的帮助文档的解释如下:
Returns the date and time when the file was created.
翻译为:但会文档的创建日期和时间。
返回之后,放在QDateTime类定义的一个对象create中。
同理将create转换格式放在另一个LineEdit中,如下:
ui->createTimeLineEdit->setText(create.toString("yyyy-MM-dd hh:mm:ss"));
这里用到了QDateTime的toString()方法,其解释如下:
Returns the datetime as a string. The format parameter determines the format of the result string.
翻译为:用字符串的方式返回时间。其参数的格式决定了返回结果的字符串的格式。
同时,在帮助文档中,提供了参考示例:
获取文档的最后访问时间:
这里和获取文档的创建时间类似。然后将其放在一个LineEdit中得以显示。
获取文档是否为目录:
利用QFileInfo的isDir方法,进行判断其是否为目录。
isDir的帮助文档的解释如下:
Returns true if this object points to a directory or to a symbolic link to a directory; otherwise returns false.
翻译为:如果这个对象指针指向一个目录或者指向一个目录的符号链接,那么就返回true,否则返回false.
槽中响应事件设计完毕,最后进行信号与槽的连接:
QObject::connect(ui->openFileButton,SIGNAL(clicked(bool)),this,SLOT(getFileInfoSlot())); QObject::connect(ui->quitButton,SIGNAL(clicked(bool)),this,SLOT(close()));
这里有两个连接,openFileButton是打开文档的操作,与以上我们设计的槽连接。
另一个连接是退出操作,与Qt自带的close()槽相连接。