QT常用类的使用
1.QFileDialog类
QfileDialog类的介绍
QFileDialog提供一个可以供用户选择文件或文件夹的窗口。这个QFileDialog类允许用户遍历文件系统,以便选择一个或者多个文件或文件夹。
创建一个QFileDialog类的最简单的方法就是使用静态函数QFileDialog::getOpenFileName()函数。
fileName = QFileDialog::getOpenFileName(this,
tr(“Open Image”), “/home/jana”, tr(“Image Files (.png .jpg *.bmp)”));
在以上的例子中,一个QFileDialog类通过静态函数被创建。这个对话框首先显示文件所在的路径“/home/jana”,匹配文件的后缀为.png,.jpg,.bmp的格式。所停靠的父窗口为当前窗口,打开的文件的标题为“open Image”。如果你想使用多个过滤器,就使用两个分号隔开,如下:”Images (.png .xpm .jpg);;Text files (.txt);;XML files (*.xml)”。
你可以不用通过静态函数来创建自己的QFileDialog,可以通过设置setFileMode(),你可以指定对象在对话框中必须选定的内容。
QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
在以上的例子中,文件对话框的模式设置为任意的文件,这就要意味着用户可以选择任意文件,甚至没有出现的特殊文件。此模式被用来创建一个保存文件窗口非常有用。使用ExistingFile模式,用户必须选择一个已经出现的文件,或者Directory模式,用户只能选择文件夹。查看QFileDialog::FileMode enum,以获得完整的模式列表。
Constant Value Description
QFileDialog::AnyFile 0 The name of a file, whether it exists or not.
QFileDialog::ExistingFile 1 The name of a single existing file.
QFileDialog::Directory 2 The name of a directory. Both files and directories are displayed. However, the native Windows file dialog does not support displaying files in the directory chooser.
QFileDialog::ExistingFiles 3 The names of zero or more existing files.
This value is obsolete since Qt 4.5:
Constant Value Description
QFileDialog::DirectoryOnly 4 Use Directory and setOption(ShowDirsOnly, true) instead.
fileMode属性包含对话框的操作模式,这表示用户希望选择的对象类型。使用setNameFilter()函数去设置对话框的过滤器。例如: dialog.setNameFilter(tr(“Images (.png .xpm *.jpg)”));
在以上的例子中,过滤器被设置为后缀为.png,.xpm,.jpg的图片格式,这意味着仅仅后缀为png,xpm,jpg格式的文件在对话框中显示。你可以使用setNameFilters()设置几个过滤器。使用selectNameFilter()去选择一个过滤器作为窗口的默认的过滤器之一。这个文件对话窗口有两个默认的模式:列表模式和详情模式。列表模式将当前目录的内容显示为文件和目录名的列表,详情模式也显示了文件和目录名的列表,但是在每个名称旁边提供了额外的信息,比如文件大小和修改日期。使用setViewMode()函数设置视图模式。
dialog.setViewMode(QFileDialog::Detail);
你在创建自己的文件对话窗口的使用使用到的一个最重要的函数就是selectedFiles()
QStringList fileNames;
if (dialog.exec())
fileNames = dialog.selectedFiles();
在上面的例子中,一个文件对话框的模型被创建和显示,如果使用者点击OK,他们选择的文件的文件名被输出在fileNames中。可以使用setDirectory()函数设置对话框所在的工作目录。可以使用selectFile()函数选择当前目录中的每个文件。标准对话框示例展示了如何使用QFileDialog以及其他内置的Qt对话框。
默认情况下,如果平台有一个本地文件对话框,将使用这个对话框。在这种情况下,用于构造对话框的小部件将不会被实例化,因此相关的访问器(如layout()和itemDelegate())将返回null。您可以设置DontUseNativeDialog选项,以确保将使用基于widget的实现,而不是使用本机对话框。
Public Types
enum AcceptMode { AcceptOpen, AcceptSave }
enum DialogLabel { LookIn, FileName, FileType, Accept, Reject }
enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles, DirectoryOnly }
enum Option { ShowDirsOnly, DontResolveSymlinks, DontConfirmOverwrite, DontUseNativeDialog, …, DontUseCustomDirectoryIcons }
flags Options
enum ViewMode { Detail, List }
ProPerties
• acceptMode : AcceptMode
• defaultSuffix : QString
• fileMode : FileMode
• options : Options
• supportedSchemes : QStringList
• viewMode : ViewMode
• 2 properties inherited from QDialog
• 58 properties inherited from QWidget
• 1 property inherited from QObject
Public Functions
QFileDialog(QWidget *parent, Qt::WindowFlags flags)
功能:构造函数
QFileDialog(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &directory = QString(), const QString &filter = QString())
功能:构造函数
参数:parent:父窗口
caption:标题名称
dirctory:文件的目录
filte:过滤器
~QFileDialog()
功能:析构函数
AcceptMode acceptMode() const
功能:得到对话框的接收模式。这个属性用于定义对话框是打开模式还是保存模式。
QString defaultSuffix() const
功能:获得指定的文件名的后缀
QDir directory() const
功能:获得对话框中当前显示的文件目录。
返回值:返回对话框中当前显示的目录
QUrl directoryUrl() const
功能:获得当前对话框显示目录的统一资源定位符。
FileMode fileMode() const
功能:获得对话框的文件模式
QDir::Filters filter() const
功能:获得当前显示文件使用的过滤器
QStringList history() const
功能:返回文件对话框的浏览历史,作为路径列表。
QFileIconProvider * iconProvider() const
功能:返回文件对话框使用的图标提供者。
QAbstractItemDelegate * itemDelegate() const
功能:返回用于在filedialog中呈现视图中的项的项委托。
QString labelText(DialogLabel label) const
功能:返回在指定标签的filedialog中显示的文本
QStringList mimeTypeFilters() const
功能:返回在此文件对话框中操作的MIME类型过滤器
QStringList nameFilters() const
功能:返回在此文件对话框中操作的文件类型过滤器
void open(QObject *receiver, const char *member)
功能:这是一个重载函数,这个函数连接了他其中的一个信号到接受者和成员变量指定的槽函数上。这个指定的信号依赖于fileSelected()信号。当对话框关闭时,这个信号将与槽函数断开。
Options options() const
功能:获得对话框的选项
QAbstractProxyModel * proxyModel() const
功能:返回文件对话框使用的代理模型。默认情况下没有设置代理
bool restoreState(const QByteArray &state)
功能:将对话框的布局、历史和当前目录恢复到指定的状态。
QByteArray saveState() const
功能:保存对话框布局、历史和当前目录的状态。
void selectFile(const QString &filename)
功能:在文件对话框中选择给定的文件名。
void selectMimeTypeFilter(const QString &filter)
功能:设置当前的MIME类型过滤器
void selectNameFilter(const QString &filter)
功能:设置当前文件类型过滤器。可以设置多个过滤器,通过分号或者空格将每个过滤器分隔开来。
void selectUrl(const QUrl &url)
功能:选择文件对话框中给定的统一资源定位符。
QStringList selectedFiles() const
功能:返回包含对话框中所选文件的绝对路径的字符串列表。如果没有文件被选择,或者选择文件模式被设置为不是已经存在的文件,则返回列表中包含当前对话框视图的文件路径。
QString selectedNameFilter() const
功能:返回用户在文件对话框中选择的过滤器
QList selectedUrls() const
功能:返回包含对话框中所选文件的url列表。如果没有选择文件,或者模式不是存在文件或存在文件,selectedUrls()包含viewport中的当前路径。
void setAcceptMode(AcceptMode mode)
功能:设置对话框窗口的接收模式
void setDefaultSuffix(const QString &suffix)
功能:设置文件的后缀
void setDirectory(const QString &directory)
功能:设置文件对话框的当前目录
void setDirectory(const QDir &directory)
功能:
void setDirectoryUrl(const QUrl &directory)
void setFileMode(FileMode mode)
void setFilter(QDir::Filters filters)
void setHistory(const QStringList &paths)
void setIconProvider(QFileIconProvider *provider)
void setItemDelegate(QAbstractItemDelegate *delegate)
void setLabelText(DialogLabel label, const QString &text)
void setMimeTypeFilters(const QStringList &filters)
void setNameFilter(const QString &filter)
void setNameFilters(const QStringList &filters)
void setOption(Option option, bool on = true)
void setOptions(Options options)
void setProxyModel(QAbstractProxyModel *proxyModel)
void setSidebarUrls(const QList &urls)
void setSupportedSchemes(const QStringList &schemes)
void setViewMode(ViewMode mode)
QList sidebarUrls() const
QStringList supportedSchemes() const
bool testOption(Option option) const
ViewMode viewMode() const
8个静态函数:
QFileDialog::getOpenFileName
可以获取打开文件的绝对路径,可以与QFile一起使用
为了说明QFileDialog::getOpenFileName()函数的用法,还是先把函数签名放在这里:
QString QFileDialog::getOpenFileName (
QWidget * parent = 0,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = 0,
Options options = 0 )
第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;
第二个参数caption,是对话框的标题。
第三个参数dir,是对话框显示时默认打开的目录,”.” 代表程序运行目录,”/” 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如”C:\”等;例如我想打开程序运行目录下的Data文件夹作为默认打开路径,这里应该写成”./Data/”,若想有一个默认选中的文件,则在目录后添加文件名即可:”./Data/teaser.graph”
第四个参数filter,是对话框的后缀名过滤器,比如我们使用”Image Files(.jpg .png)”就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用”;;”分割,比如”JPEG Files(.jpg);;PNG Files(.png)”;
第五个参数selectedFilter,是默认选择的过滤器;
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//括号里的参数分别是:指定父类、标题、默认打开后显示的目录、右下角的文件过滤器。
QString file_name = QFileDialog::getOpenFileName(NULL,”标题”,”.”,”*.txt”);
qDebug() << file_name;
return a.exec();
}
QStringList QFileDialog::getOpenFileNames();
如果我要想选择多个文件怎么办呢?Qt提供了getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放QString的List,也就是STL中的list。
例子:
QStringList file_name = QFileDialog::getOpenFileNames(NULL,”标题”,”.”,”.“);
qDebug() << file_name.at(0);
qDebug() << file_name.at(1);
getExistingDirectory 只获取文件夹的名字
例子:
QString file_name = QFileDialog::getExistingDirectory(NULL,”caption”,”.”);
qDebug() << file_name;
getExistingDirectoryUrl
和getExistingDirectory类似,功能也是获取文件夹路径,最大的区别在于参数里的路径是QUrl类型,这为用户提供了选择远程目录的能力。
getOpenFileUrl 获取远程文件为用户提供了获取远程文件路径的能力
getOpenFileUrls 获取多个远程文件可以得到多个远程文件路径
getSaveFileName 保存本地文件对话框
getSaveFileUrl 保存远程文件对话框
public function:
通过构造对象调用公有函数:
QFileDialog fd;//构建一个对象
fd.setwindowtitle();设置窗口的标题
fd.directory();返回对话框中选中的目录 QDir QFileDialog::directory();
2.QFile类
QFile类介绍
QFile类提供了一个文件读写的一个接口,QFile是一个用于读取和写入文本、二进制文件和资源的I/O设备。QFile可以自己使用,或者更方便地使用QTextStream或QDataStream。文件的名字可以在构造函数中传递,也可可以使用setFileName()函数设置文件名字。QFile期望文件的分隔符是”/”而不是操作系统。使用其他的分隔符如”\”是不被支持的。
你可以使用exists()函数检查一个文件是否存在,使用remove()函数移除一个文件(更高级的与文件系统相关的操作又QFileInfo和QDir类提供)。使用open()函数打开一个文件,使用close()函数关闭一个文件,以及使用flush()函数刷新一个函数。通常使用QDataStream类和QTextStream类读取和写入一个数据,但是你也需要调用QIODevice类继承的read(),readLine(),readALl(),Write()函数。QFile类也继承了getChar(),putChar()和ungetChar(),这一次只能得到一个字母。size()函数可以获得文件的大小。使用pos()函数可以得到当前文件的光标的位置,或者使用seek()函数移动光标到一个新的位置。如果已经到达一个文件的结尾,atEnd()函数将返回true。
直接阅读文件
以下示例逐行读取文本文件:
QFile file(“in.txt”);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
QByteArray line = file.readLine();
process_line(line);
}
The QIODevice::Text flag标志位通过open函数告诉qt将Windows-style风格的结束标志\r\n转换成C++风格的结束标志\n, 默认情况下,QFile假定为二进制,即它不会对文件中存储的字节执行任何转换。
使用流来读取文件
下一个示例使用QTextStream逐行读取文本文件:
QFile file(“in.txt”);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
process_line(line);
}
QTextStream负责将存储在磁盘上的8位数据转换为16位Unicode QString。默认情况下,它假定使用了用户系统的本地8位编码(例如,在大多数基于unix的操作系统上使用UTF-8,详情见QTextCodec::codecForLocale()),可以使用QTextStream::setCodec()对其进行更改。
要编写文本,我们可以使用操作符<<(),该操作符重载,取左侧的QTextStream,右侧的各种数据类型(包括QString):
QFile file(“out.txt”);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out << “The magic number is: ” << 49 << “\n”;
QDataStream类似,您可以使用操作符<<()来编写数据,操作符>>()来读取数据。有关详细信息,请参阅类文档。
QFile类是一个操作文件的输入/输出设备
继承自QIODevice类,QDIODevice类不能被实例化
QFile fd(“xxxx.txt”);构建对象fd来表示给定名称为xxxx.txt的文件
fd.open(QIODevice::ReadOnly) ;//表示打开该文件
qint64 QIODevice::readLine(char*data,qin64 maxSize);
功能:从设备中读取一行的数据
返回值:读取数据的字符个数。
如果一行不能被读取,但是没有出现错误,则返回0;如果出现一个错误则返回正在被读取的行号。如果返回-1,表示没有读取到数据
参数:data:读取一行数据放到data的存储区中
maxSize:读取一行中的最大字节数(最后一个字节是’\0’)
遇到以下几种情况:
1.遇到换行符\n结束
2.已经读取到maxSize-1个字节,结束
3.遇到结束标志EOF
例子:
QFile file(“box.txt”);
if (file.open(QFile::ReadOnly)) {
char buf[1024];
qint64 lineLength = file.readLine(buf, sizeof(buf));
if (lineLength != -1) {
// the line is available in buf
}
}
QByteArray QIODevice::readLine(qint64 maxSize = 0)
功能:从设备中读取一行的数据
返回值:返回一个字节数组。
参数:maxSize从设备中读取一行数据,但是读取字节的最大数字不能超过maxsize个
[virtual protected] qint64 QIODevice::readLineData(char *data, qint64 maxSize)
返回值:返回读取到数据的字符个数
参数:data读取到的数据存放到data中,最大读取的字符数maxSize
QByteArray QIODevice::readAll()
返回值:读取设备中所有的数据,并且返回一个字符数组。
qint64 QIODevice::write(const char *data)
功能:向一个设备中写入数据
参数:data:向设备中写入的数据
返回值:向设备中实际写入数据的字符个数。
QTextStream::QTextStream(QIODevice *device)
功能:构造一个文本流操作这个设备device
参数:device设备的地址
QString str;
QTextStream in(stdin);
in >> str;//从文件stdin中读取数据
in<