
天山老妖
关注
Hello Qt(三十二)——Model/View框架 原创
2022-03-05 00:03:21
天山老妖
码龄7年
关注
一、Model/View框架简介
1、Model/View框架核心思想
Model/View框架的核心思想是模型(数据)与视图(显示)相分离,模型对外提供标准接口存取数据,不关心数据如何显示,视图自定义数据的显示方式,不关心数据如何组织存储。
Model/View框架中数据与显示的分离,可以允许使用不同界面显示同一数据,也能够在不改变数据的情况下添加新的显示界面。为了处理用户输入,引入了委托(delegate)。引入委托的好处是可以自定义数据项的渲染和编辑。
模型必须为每一个数据提供独一无二的索引,视图通过索引访问模型中的数据。
模型与数据源进行交互,为框架中其它组件提供接口。交互的本质在于数据源的类型以及模型的实现方式。视图从模型获取模型索引,通过将模型索引反向传给模型,视图又可以从数据源获取数据。在标准视图中,委托渲染数据项;在需要编辑数据时,委托使用直接模型索引直接与模型进行交互。
Model/View架构分为三部分:模型、视图和委托。每一个组件都由一个抽象类定义,抽象类提供了基本的公共接口以及一些默认实现。
2、Model/View框架工作机制
模型、视图和委托使用信号槽进行交互:
A、底层维护的数据发生改变时,模型发出信号通知视图
B、当用户与视图进行交互时,视图发出信号提供了有关用户与界面进行交互的信息
C、当用户编辑数据项时,委托发出信号用于告知模型和视图编辑器的状态。
3、Model/View框架的类
所有的模型都是QAbstractItemModel的子类。QAbstractItemModel类定义了供视图和委托访问数据的接口。模型并不一定存储数据本身。QAbstractItemModel提供的接口足够灵活,足以应付以表格、列表和树的形式显示的数据。如果要为列表或者表格设计自定义的模型,直接继承QAbstractListModel和QAbstractTableModel类会更好,因为这两个类已经实现了很多通用函数。
QT内置了多种标准模型:
QStringListModel:存储简单的字符串列表
QStandardItemModel:可以用于树结构的存储,提供了层次数据
QFileSystemModel:本地系统的文件和目录信息
QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据
QT提供了多个预定义好的视图类:
QListView:用于显示列表
QTableView:用于显示表格
QTreeView:用于显示层次数据
QAbstractItemView
QAbstractItemDelegate 则是所有委托的抽象基类
自 Qt 44 以来,默认的委托实现是QStyledItemDelegate。但是,QStyledItemDelegate 和QItemDelegate 都可以作为视图的编辑器,二者的区别在于,QStyledItemDelegate 使用当前样式进行绘制。在实现自定义委托时,推荐使用QStyledItemDelegate 作为基类,或者结合Qt style sheets。
二、Model
1、模型简介
Model/View框架中,Model提供一种标准接口,供视图和委托访问数据。 QT中,Model接口由QAbstractItemModel类进行定义。不管底层数据是如何存储的,只要是QAbstractItemModel的子类,都提供一种表格形式的层次结构。视图利用统一的转换来访问模型中的数据。模型内部数据的组织方式并不一定和视图中数据的显示相同。
List Model虽然是线性的列表,有一个 Root Item(根节点),线性的一个个数据可以看作是一个只有一列的表格,但是它是有层次的,因为有一个根节点。Table Model就比较容易理解,只是也存在一个根节点。Tree Model主要面向层次数据,而每一层次都可以都很多列,因此也是一个带有层次的表格。
2、模型索引
为了使数据的显示同存储分离,引入了模型索引(model index)的概念。通过模型索引,可以访问模型的特定元素的特定部分。视图和委托使用模型索引来请求所需要的数据。由此可以看出,只有模型自己需要知道如何获得数据,模型所管理的数据类型可以使用通用的方式进行定义。模型索引保存有创建的它的那个模型的指针,使同时 *** 作多个模型成为可能。
模型索引提供了所需要的信息的临时索引,用于通过模型取回或者修改数据。由于模型随时可能重新组织其内部的结构,因此模型索引很可能变成不可用的,此时,就不应该保存这些数据。如果你需要长期有效的数据片段,必须创建持久索引。持久索引保证其引用的数据及时更新。临时索引(也就是通常使用的索引)由QModelIndex类提供,持久索引则是 QPersistentModelIndex类。
为了定位模型中的数据,需要三个属性:行号、列号以及父索引。
在类表格的视图中,比如列表和表格,行号和列号足以定位一个数据项。但对于树型结构,由于树型结构是一个层次结构,而层次结构中每一个节点都有可能是一个表格。所以,每一个项需要指明其父节点。由于在模型外部只能用过索引访问内部数据,因此,index()函数还需要一个 parent 参数:
QModelIndex index = model->index(row, column, parent);
父结点为虚拟root结点时,可以使用空索引(QModelIndex()产生)作为父结点参数。
3、数据角色
模型可以针对不同的组件(或者组件的不同部分,比如按钮的提示以及显示的文本等)提供不同的数据。例如,Qt::DisplayRole用于视图的文本显示。通常来说,模型中的数据项包含一系列不同的数据角色,数据角色定义在 Qt::ItemDataRole 枚举中。
通过为每一个角色提供恰当的数据,模型可以告诉视图和委托如何向用户显示内容。不同类型的视图可以选择忽略自己不需要的数据,也可以添加所需要的额外数据。
模型中的数据在视图中的显示方式可能不同,模型必须为数据设置特定数据角色。数据角色用于提示视图数据的作用,是不同视图统一风格显示数据的标准。
4、QStringListModel
QStringListModel是一个可编辑的模型,可以为组件提供一系列字符串作为数据,是封装了QStringList的model。QStringListModel通常作为只有一列的视图组件的model,如QListView和QComboBox。
QStringListModel使用实例如下:
#include <QApplication>
#include <QStringListModel>
#include <QListView>
#include <QStringList>
int main(int argc, char argv[])
{
QApplication a(argc, argv);
QStringListModel listModel = new QStringListModel;
QListView view = new QListView;
QStringList nameList;
nameList<<"ZheDong Mao"<<"RenLai Zhou"<<"XiaoPing Deng"
<<"ShaoQi Liu"<<"De Zhu"<<"DeHuai Peng";
listModel->setStringList(nameList);
view->setModel(listModel);
view->setEditTriggers(QAbstractItemView::AnyKeyPressed |
QAbstractItemView::DoubleClicked);
view->setWindowTitle("QStringListModel");
view->show();
return aexec();
}
5、QFileSystemModel
QFileSystemModel是QT标准的文件系统的model。
QFileSystemModel使用实例:
#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>
int main(int argc,char argv[])
{
QApplication app(argc,argv);
//创建文件系统模型
QFileSystemModel model;
//指定根目录
modelsetRootPath(QDir::currentPath());
//创建树形视图
QTreeView tree;
//为视图指定模型
treesetModel(&model);
//指定根索引
treesetRootIndex(modelindex(QDir::currentPath()));
//创建列表视图
QListView list;
listsetModel(&model);
listsetRootIndex(modelindex(QDir::currentPath()));
treeshow();
listshow();
return appexec();
}
6、QSortFilterProxyModel
QSortFilterProxyModel类提供在其他的model和view之间排序和过滤数据的支持。QSortFilterProxyModel不能单独使用,是一个代理,真正的数据需要另外的模型提供。QSortFilterProxyModel的作用是对数据进行排序和过滤。
QSortFilterProxyModel使用实例:
#include <QApplication>
#include <QFileSystemModel>
#include <QSortFilterProxyModel>
#include <QTreeView>
#include <QListView>
int main(int argc,char argv[])
{
QApplication app(argc,argv);
//创建文件系统模型
QFileSystemModel model;
//指定根目录
modelsetRootPath(QDir::currentPath());
//创建树形视图
QSortFilterProxyModel proxymodel;
proxymodelsetFilterKeyColumn(0);
proxymodelsetSourceModel(&model);
QTreeView tree;
//为视图指定模型
treesetModel(&proxymodel);
//指定根索引
treesetRootIndex(proxymodelindex(0, 0, QModelIndex()));
//创建列表视图
QListView list;
listsetModel(&proxymodel);
listsetRootIndex(proxymodelindex(0, 0, QModelIndex()));
treeshow();
listshow();
return appexec();
}
三、View
Model/View 架构中,视图是数据从模型到最终用户的途径。数据通过视图向用户进行显示,但通常数据的显示同底层数据的存储是完全不同的。
QAbstractItemModel提供标准的模型接口,使用QAbstractItemView提供标准的视图接口,可以将数据同显示层分离,在视图中利用前面所说的模型索引。视图管理来自模型的数据的布局:既可以直接渲染数据本身,也可以通过委托渲染和编辑数据。
视图不仅用于显示数据,还用于在数据项之间的导航以及数据项的选择。另外,视图也需要支持很多基本的用户界面的特性,例如右键菜单以及拖放。视图可以提供数据编辑功能,也可以将编辑功能交由某个委托完成。视图可以脱离模型创建,但是在其进行显示之前,必须存在一个模型。对于用户的选择,多个视图可以相互独立,也可以进行共享。
QT内置了QListView、QTreeView、QTableView视图类,QListView把model中的数据项以一个简单的列表的形式显示,或是以经典的图标视图的形式显示。QTreeView把model中的数据项作为具有层次结构的列表的形式显示,允许以紧凑的深度嵌套的结构进行显示。QTableView把model中的数据项以表格的形式展现。
四、Delegate
委托就是供视图实现某种高级的编辑功能。Model/View 没有将用户交互部分完全分离。一般地,视图将数据向用户进行展示并且处理通用的输入。但是,对于某些特殊要求(比如这里的要求必须输入数字),则交予委托完成。这些组件提供输入功能,同时也能渲染某些特殊数据项。委托的接口由 QAbstractItemDelegate定义。
QAbstractItemDelegate 通过paint()和sizeHint()两个函数渲染用户内容(必须自己将渲染器绘制出来)。从QT44开始,QT提供了基于组件的子类:QItemDelegate和QStyledItemDelegate。默认的委托是QStyledItemDelegate。QItemDelegate与QStyledItemDelegate的区别在于绘制和向视图提供编辑器的方式。QStyledItemDelegate使用当前样式绘制,并且能够使用Qt Style Sheet,在自定义委托时推荐使用QStyledItemDelegate作为基类。
继承自QStyledItemDelegate或QItemDelegate的自定义委托类需要重写实现以下几个函数:
[virtual] QWidget createEditor(QWidget parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
创建编辑器,作为用户编辑数据时所使用的编辑器,从模型中接受数据,返回用户修改的数据。
[virtual] void setEditorData(QWidget editor, const QModelIndex &index) const
根据模型索引获取模型中的数据并设数据到编辑器
[virtual] void setModelData(QWidget editor, QAbstractItemModel model,
const QModelIndex &index) const
将编辑后的数据写入model
[virtual] void updateEditorGeometry(QWidget editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
更新编辑器布局
五、项选择模型
1、QItemSelectionModel简介
选择是视图中常用的 *** 作。在列表、树或者表格中,通过鼠标点击可以选中某一项,选中项会变成高亮或者反色。在 QT中,选择也是使用了一种模型。在 Model/View架构中,选择模型提供了一种更通用的对选择 *** 作的描述。对于一般应用而言,QT内置的选择模型已经足够,但QT也允许创建自己的选择模型,来实现一些特殊的 *** 作。
QT使用QItemSelectionModel类获取视图中数据项的选择情况。QItemSelectionModel可以保持对视图中选中数据项的跟踪。视图中被选择的数据项的信息存储在一个QItemSelectionModel实例中。选中的数据项的模型索引与所有的视图都是独立的。一个模型设置多个视图时,可以实现在多个视图之间共享同一个选择模型,达到同步 *** 作的目的。视图中总有一个当前数据项和一个选中的数据项,他们可以是同一个数据项。
选择由选择区域组成。模型只将选择区的开始和结束的索引位置记录下来,以保证对大的选区也有很好的性能。非连续选区则由多个连续选择组成。
标准视图类(QListView、QTreeView、QTableView)提供了默认的选择模型,足以满足大多数应用程序的需求。一个视图的选择模型可以通过 selectionModel()函数获取,然后使用setSelectionModel()提供给其它视图共享,因此,一般没有必要新建选择模型。
如果需要创建一个选择区,需要指定一个模型以及一对索引,使用这些数据创建一个QItemSelection对象。索引指向给定的模型中的数据,并且作为一个块状选择区的左上角和右下角的索引。为了将选择区应用到模型上,需要将选择区提交到选择模型。这种 *** 作有多种实现,对于现有选择模型有着不同的影响。
2、项选择模型使用
A、构建标准数据项模型并设置设置数据
//构建7行4列的项目模型
QStandardItemModel model = new QStandardItemModel(7,4,this);
for (int row=0; row < 7; row++)
{
for (int col=0; col < 4; col++)
{
QStandardItem item = new QStandardItem(QString("%1")arg(row4+col));
//为项目模型添加项目
model->setItem(row,col,item);
}
}
B、添加视图,设置模型
//添加视图,并将视图放在窗体中央
QTableview view = new QTableView;
view->setModel(model);//为视图添加模型
setCentralWidget(view);
C、获取视图的数据项选择模型
QItemSelectionModel selectionModel = view->selectionModel();
D、设置被选择的数据项
//定义左上,右下的索引,然后使用这两个索引创建选择
QModelIndex topLeft;
QModelIndex rightBottom;
QModelIndex parentIndex = QModelIndex();
topLeft = model->index(1,1,parentIndex);
rightBottom = model->index(5,2,parentIndex);
//设置被选择的数据项
QItemSelection selection(topLeft, rightBottom);
E、设置选择模式
selectionModel->select(selection,QItemSelectionModel::Select);
QItemSelectionModel::Select:选择所有指定的选区
QItemSelectionModel::Toggle:反向 *** 作
QItemSelectionModel::Deselect:取消指定的已选选区
QItemSelectionModel::Rows:选择行
QItemSelectionModel::Columns:选择列
QItemSelectionModel::Current:将当前选区替换为新的选区
QItemSelectionModel::Clear:取消全部已有选区
F、选择模型的选择改变信号
[signal] void QItemSelectionModel::selectionChanged(const QItemSelection &selected,
const QItemSelection &deselected)
选择发生改变时,触发信号。会发送被选择的QItemSelection和未被选择的QItemSelection
[signal] void QItemSelectionModel::currentChanged(const QModelIndex& index,
const QModelIndex &previous)
当前数据项变化时,触发信号。会发送当前选择的QModelIndex和前一个QModelIndex。
G、选择改变信号的槽函数
void updateSelection(QItemSelection &selected,QItemSelection &deselected);
选择模型改变后的槽函数
void updateSelection(QItemSelection &selected, QItemSelection &deselected)
{
QModelIndex index;
QModelIndexList indexList = selectedindexes();
foreach (index, indexList)
{
QString text = QString("(%1,%2)")arg(indexrow())arg(indexcolumn());
view->model()->setData(index,text);
}
indexList = deselectedindexes();
//清空上一次选择的项目内容
foreach (index, indexList)
{
view->model()->setData(index,"");
}
}
void changeCurrent(const QModelIndex& index,const QModelIndex &previous);
显示当前选择项的数据改变情况
void changeCurrent(const QModelIndex& index, const QModelIndex &previous)
{
qDebug() << QString("move(%1,%2)to(%3,%4)")
arg(previousrow())arg(previouscolumn())
arg(currentrow())arg(currentcolumn());
}
H、信号与槽函数的连接
connect(selectionModel,SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this,SLOT(updateSelection(QItemSelection&,QItemSelection&)));
connect(selectionModel,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this,SLOT(changeCurrent(QModelIndex,QModelIndex)));
I、视图间共享选择模型
QTableView view2 = new QTableView;
view2->setWindowTitle("TableView2");
view2->setModel(model);//设置模型
view2->setSelectionModel(selectionModel);//设置共同的选择模型
view2->show();
C++是一种编程语言,它本身并不提供在文件系统中查找cpp文件的函数。但是在C++程序中,您可以使用标准库中的一些函数或第三方库来查找cpp文件。以下是几种可能的方法:
1 在C++标准库中使用<direnth>头文件中定义的函数,如opendir()和readdir(),这些函数可以用于打开和读取目录中的文件。
2 使用boost库中的filesystem模块,该模块提供了一些功能强大的函数,例如recursive_directory_iterator,它可以递归地遍历目录树中的所有文件,并返回一个迭代器,您可以使用该迭代器来查找cpp文件。
3 使用Qt Core库中的QDir类,它提供了许多方便的函数来管理目录和文件,例如QDir::entryList()函数,它返回目录中所有文件的列表,您可以根据扩展名来过滤出cpp文件。
请注意,以上所述的方法只是指在编写C++程序中查找cpp文件的方法,如果您想在 *** 作系统中手动查找这些文件,则可以使用 *** 作系统提供的文件搜索工具来进行搜索。
我之前做listwidget的时候知道有个叫QDir的类,可以获取系统的文件目录树。如此,可以知道目录下的所有文件,再具体 *** 作就容易了。
这算给你提供个思路,再查查相关资料吧。
你好,您可以单独使用该DIR命令(只需在命令提示符处键入“dir”)来列出当前目录中的文件和文件夹。要扩展该功能,您需要使用与命令关联的各种开关或选项。
基于文件属性的显示
您可以在 DIR 命令后添加“/A”,后跟一个字母代码,以显示具有特定属性的文件。这些字母代码包括:
D:显示当前路径下的所有目录
R:显示只读文件
H:显示隐藏文件
A:准备归档的文件
S:系统文件
不是内容索引文件
L:返回点
因此,例如,要仅显示当前路径中的目录,您可以键入以下命令,然后按 Enter:
您也可以组合这些代码。例如,如果您只想显示同样被隐藏的系统文件,您可以使用以下命令:
您还可以在任何这些字母代码前添加“-”(减号)以指定 DIR 命令不显示该类型的文件。因此,例如,如果您不想在结果中看到任何目录,则可以使用以下命令:
另一个提示:您可以使用冒号将开关与可选代码分开,而不是像我们在示例中那样将主开关和字母代码塞在一起。
它可以使事情更容易解析,但它完全是可选的。
显示剥离结果
打开网易新闻 查看精彩
使用/b带有 DIR 命令的开关会去除所有多余的信息,仅显示当前目录中的文件夹和文件的名称,而不显示文件大小和时间戳等属性。键入以下命令以使其工作:
使用千位分隔符显示
在现代版本的 Windows 中,命令提示符显示用逗号分隔的大量数字(因此:25,000 而不是 25000)。情况并非总是如此。在旧版本中,您必须使用/c开关来显示这些逗号。
如果它已经是默认设置,为什么还要在这里包含它?因为如果出于某种原因您 不想显示这些逗号,则可以使用此开关和“-”减号:
在列中显示结果
打开网易新闻 查看精彩
您可以使用该/D开关在两列而不是一列中显示结果。当您以这种方式显示结果时,命令提示符不会显示额外的文件信息(文件大小等)——仅显示文件和目录的名称。
以小写形式显示结果
该/L开关将文件和文件夹的所有名称显示为小写。
在最右侧显示文件名结果
打开网易新闻 查看精彩
默认情况下,命令提示符在最右侧显示文件名。以前是用/N开关来达到这个效果的。现在,您可以将它与“-”(减号)一起使用,以将文件名显示在最左侧。
以排序顺序显示结果
您可以使用/O 后跟字母代码的开关来显示以各种方式排序的目录结果。这些字母代码包括:
D:按日期/时间排序。较旧的条目首先出现。
E:按字母顺序按文件扩展名排序。
G:首先列出文件夹,然后是文件。
N:按字母顺序按文件/文件夹名称排序。
S:按文件大小排序,从小到大。
因此,例如,您可以使用以下命令按时间和日期对结果进行排序,较旧的条目首先出现:
您还可以在上述任何选项之前添加“-”(减号)以颠倒顺序。因此,例如,如果您想按时间和日期对文件进行排序,较新的条目首先出现,您可以使用以下命令:
一次显示一页结果
有些目录有成百上千的文件。您可以使用该/P开关让命令提示符在显示每个屏幕后暂停结果。您必须按一个键才能继续查看下一页结果。
显示元数据
打开网易新闻 查看精彩
使用/QDIR 命令上的开关可显示与文件和目录相关的元数据以及所有权详细信息。
显示备用数据流 (ADS)
该/R开关显示文件可能包含的任何备用数据流 (ADS)。ADS 是 NTFS 文件系统的一项功能,它允许文件包含用于按作者和标题定位文件的附加元数据。
显示所有文件和文件夹以及里面的所有内容
您可以使用该/S开关以递归方式显示当前目录中的所有文件和文件夹。这意味着每个子目录中的所有文件和文件夹,这些子目录中的所有文件和文件夹,等等。为很多 结果做好准备 。
按时间排序显示结果
将/T开关与字母代码一起使用,您可以按与文件和文件夹关联的不同时间戳对结果进行排序。这些字母代码包括:
A:上次访问该项目的时间。
C:创建项目的时间。
W:上次写入项目的时间。这是使用的默认选项。
因此,例如,要按创建项目的时间对结果进行排序,您可以使用以下命令:
以宽格式显示结果
该/W开关类似于/D(显示列),但它以宽格式水平对结果进行排序。
显示短名称文件名
/X当长名称不符合 83 命名规则时,该开关会显示文件的短名称。
显示 DIR 的帮助页面
使用该/开关可显示有关 DIR 命令的有用信息,包括我们讨论过的所有开关的简要说明。
打开网易新闻 查看精彩
DIR 命令示例
好的,现在您了解了与 DIR 命令相关的开关和选项。让我们看一些现实世界的例子,以更好地了解如何开始使用它们。
一个简单的 dir 命令会返回您所在的当前目录中所有文件和文件夹的列表。
打开网易新闻 查看精彩
运行以下命令通过使用“s”属性显示当前路径中的所有系统文件:
说/a:s
打开网易新闻 查看精彩
但是,如果您想在当前路径的所有后续文件夹中查看某种类型的所有文件,该怎么办。这很简单,只需运行这个非常快速且有用的命令:
您可以将“mp3”部分替换为您要查找的任何文件格式。
打开网易新闻 查看精彩
星号充当通配符,表示“在末尾查找任何具有 mp3 文件格式的内容”,而“/s”则递归地查看当前路径中的所有文件夹。
现在,您可能已经注意到返回了很多结果。在他们滚出屏幕之前几乎无法阅读。这是我们可以使用暂停开关让您有机会阅读它们的地方。为此,请像这样修改命令:
命令提示符提供的另一个技巧称为管道。您可以使用“>”字符将一个命令的结果发送到另一个地方或服务。一个很好的例子是 将所有结果发送到文本文件。然后,您可以稍后滚动浏览它们或将它们导入到其他类型的文档中。为此,您可以使用以下命令:
打开网易新闻 查看精彩
我们/b在那里添加了开关,只输出文件名本身,没有任何其他细节。大于符号将结果中通常显示的所有内容直接重新路由到文件。
DIR 命令还有更多组合和用途,但这应该是帮助您了解基础知识的良好起点。
希望能帮到你。
不可以
1路径中使用斜杠/和反斜杠\的区别
Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符。
Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不混淆,所以采用 反斜杠\ 作为路径分隔符。所以目前windows系统上的文件浏览器都是用 反斜杠\ 作为路径分隔符。随着发展,DOS系统已经被淘汰了,命令提示符也用的很少,斜杆和反斜杠在大多数情况下可以互换,没有影响。
知道这个背景后,可以总结一下结论:
(1)浏览器地址栏网址使用 斜杆/ ;
(2)windows文件浏览器上使用 反斜杠\ ;
(3)出现在html url() 属性中的路径,指定的路径是网络路径,所以必须用 斜杆/ ;
<div style="background-image:url(/Image/Control/titlejpg); background-repeat:repeat-x;
padding:10px 10px 10px 10px"></div>
// 如果url后面用反斜杠,就不会显示任何背景
(4)出现在普通字符串中的路径,如果代表的是windows文件路径,则使用 斜杆/ 和 反斜杠\ 是一样的;如果代表的是网络文件路径,则必须使用 斜杆/ ;
<img src="\Image/Control/dingjpg" /> // 本地文件路径,/ 和 \ 是等效的
<img src="/Image\Control\caijpg" />
<img src=">
这个函数只有这些参数
QDir::Dirs - 只列出目录。
QDir::Files - 只列出文件。
QDir::Drives - 列出磁盘驱动器(在Unix下被忽略)。
QDir::NoSymLinks - 不列出符号连接(不支持符号连接的 *** 作系统会忽略它)。
QDir::All - 列出目录、文件、驱动器和符号连接(除非你指定系统,这不会列出损坏的符号连接)。
QDir::TypeMask - Dirs、Files、Drives和NoSymLink的掩码。
QDir::Readable - 列出应用程序可以读访问的文件。
QDir::Writable - 列出应用程序可以写访问的文件。
QDir::Executable - 列出应用程序可以执行访问的文件。可执行需要由Dirs和Files组合。
QDir::RWEMask - Readable、Writable和Executable标记的掩码。
QDir::Modified - 只列出已经被修改的文件(在Unix下被忽略)。
QDir::Hidden - 列出隐藏文件(在Unix下就是以开始的文件)。
QDir::System - 列出系统文件(在Unix下就是FIFO、套接字和设备文件)。
QDir::AccessMask - Readable、Writable、Executable、Modified、Hidden和System标记的掩码。
QDir::DefaultFilter - 内部标记
按照你的思路应该是这个函数
void addFilter ( const QString & filter )
QString getRunParentPath()
{
QString strPath = QCoreApplication::applicationDirPath();
QDir dir(strPath);
bool bSuccess = dircdUp();
if (bSuccess == true) {
strPath = dirpath() + "/";
}
return strPath;
}
我这里不能尝试你改成 dsetFilter(QDir::AllDirs|QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dsetSorting(QDir::Size | QDir::Reversed);试一下
以上就是关于model/view可以不存数据嘛,全部的内容,包括:model/view可以不存数据嘛,、c++查找cpp文件有哪些函数、qt 读取文件名不确定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)