目录:
(一) Qt Model/View 的简单说明 、预定义模型
(二)使用预定义模型 QstringListModel例子
(三)使用预定义模型QDirModel的例子
(四)Qt实现自定义模型基于QAbstractTableModel
(五)Qt实现自定义模型基于QAbstractItemModel
(六) Qt实现自定义委托 QDelegate
使用预定义模型QDirModel的例子
Main.cpp
#include <QApplication>
#include "directoryviewer.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
DirectoryViewer directoryViewer;
directoryViewer.show();
return app.exec();
}
directoryviewer.h
#ifndef DIRECTORYVIEWER_H
#define DIRECTORYVIEWER_H
#include <QDialog>
class QDialogButtonBox;
class QDirModel;
class QTreeView;
class DirectoryViewer : public QDialog
{
Q_OBJECT
public:
DirectoryViewer(QWidget *parent = 0);
private slots:
void createDirectory();
void remove();
private:
QTreeView *treeView;
QDirModel *model;
QDialogButtonBox *buttonBox;
};
#endif
directoryviewer.cpp
#include <QtGui>
#include "directoryviewer.h"
DirectoryViewer::DirectoryViewer(QWidget *parent)
: QDialog(parent)
{
//创建一个目录模型
model = new QDirModel;
//可编辑
model->setReadOnly(false);
//初始排序属性 目录在前,然后文件
model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
treeView = new QTreeView;
treeView->setModel(model);
treeView->header()->setStretchLastSection(true);
treeView->header()->setSortIndicator(0, Qt::AscendingOrder);
treeView->header()->setSortIndicatorShown(true);
treeView->header()->setClickable(true);
//当前目录的模型索引
QModelIndex index = model->index(QDir::currentPath());
//如果需要就打开它的父对象一直到根节点,并且调用scrollTo()滚动倒当前项,确保它是可见的
treeView->expand(index);
treeView->scrollTo(index);
//确保第一列足够宽,可以显示它所有的条目。
treeView->resizeColumnToContents(0);
buttonBox = new QDialogButtonBox(Qt::Horizontal);
QPushButton *mkdirButton = buttonBox->addButton(
tr("&Create Directory..."), QDialogButtonBox::ActionRole);
QPushButton *removeButton = buttonBox->addButton(tr("&Remove"),
QDialogButtonBox::ActionRole);
buttonBox->addButton(tr("&Quit"), QDialogButtonBox::AcceptRole);
connect(mkdirButton, SIGNAL(clicked()),
this, SLOT(createDirectory()));
connect(removeButton, SIGNAL(clicked()), this, SLOT(remove()));
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(treeView);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
setWindowTitle(tr("Directory Viewer"));
}
void DirectoryViewer::createDirectory()
{
//获取当前目录 模型索引
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
return;
//获取创建目录名
QString dirName = QInputDialog::getText(this,
tr("Create Directory"),
tr("Directory name"));
//创建子目录 mkdir(模型索引,目录名)
if (!dirName.isEmpty()) {
if (!model->mkdir(index, dirName).isValid())
QMessageBox::information(this, tr("Create Directory"),
tr("Failed to create the directory"));
}
}
void DirectoryViewer::remove()
{
QModelIndex index = treeView->currentIndex();
if (!index.isValid())
return;
//删除目录 rmdir(模型索引)
bool ok;
if (model->fileInfo(index).isDir()) {
ok = model->rmdir(index);
} else {
ok = model->remove(index);
}
if (!ok)
QMessageBox::information(this, tr("Remove"),
tr("Failed to remove %1").arg(model->fileName(index)));
}
分享到:
相关推荐
【标题】中的“讯飞星火模型代码例子”反复提及,显然强调了这是关于科大讯飞公司的“星火”模型的代码示例。科大讯飞是一家知名的中国人工智能公司,其在语音识别、自然语言处理等领域有深厚的技术积累。星火模型...
Spark隐语义模型推荐系统是一种基于大数据处理框架Apache Spark的推荐算法实现,它结合了机器学习中的隐语义模型(Latent Factor Models)与分布式计算的优势。本项目着重讲解如何利用Python编程语言来构建这样的...
在给定的博客链接(由于此处无法直接访问外部链接,但通常这类博客会详细解释示例代码),作者可能会提供一个使用C或C++实现的Select模型例子。在这样的例子中,通常会包含以下步骤: 1. 初始化:创建套接字,绑定...
在Android上使用JPCT加载三维模型,通常涉及到以下几个关键知识点: 1. **Android OpenGL ES**: JPCT基于OpenGL ES,这是Android系统支持的用于绘制2D和3D图形的API。OpenGL ES是桌面版OpenGL的一个子集,专为移动...
【初音MMD模型——三妈式Miku】 初音未来(Miku Hatsune)是全球知名的虚拟歌手,她在音乐创作领域拥有大量的粉丝。Miku的3D模型,特别是Miku Miku Dance(MMD)模型,是许多爱好者进行动画制作、舞蹈模拟和创意...
本文将深入探讨IOCP完成端口模型,并通过具体例子来阐述其工作原理和实现方法。 IOCP是Windows操作系统提供的一种高度优化的异步I/O模型,特别适用于需要处理大量并发连接的服务,如Web服务器或游戏服务器。相比于...
在这个例子中,我们创建了一个`GeneratorUNet`类的实例,这是一个生成对抗网络(GAN)中使用的生成器模型。 效果展示部分并没有具体展现,不过可以想象,通过这种方式可视化出来的模型,将是一个节点清晰、连接明确...
### 使用SketchUp为OsgEarth制作三维城市模型并准确添加到地图中的方法 #### 工具与数据准备 为了能够高效地使用SketchUp为OsgEarth制作三维城市模型,并将其准确地添加到地图中,首先需要准备好必要的工具与数据...
基于Spark SQL+Spark MLlib+Spark Streaming+隐语义模型(LFM)+实际项目经验的个性化电影推荐系统源码+项目说明.zip 基于Spark SQL+Spark MLlib+Spark+隐语义模型(LFM)+实际项目经验的个性化电影推荐系统源码.zip ...
该“gltf格式警车三维模型”是专为这些目的设计的,提供了一个逼真的警车模型,可以在各种项目中使用。这个模型可能是由专业3D艺术家使用像Blender、Maya或3ds Max这样的3D建模软件创建的,然后通过专门的导出工具...
标题中的"模型预测控制例子代码"表明这是一个教学资源,旨在帮助初学者理解和应用模型预测控制。通过提供的代码,学习者可以了解MPC的基本工作原理以及如何在实际系统中实现。 描述中的"基于状态空间的模型预测MPC...
车辆三自由度模型,有一定参考价值
【三维城市模型与gltf格式详解】 在现代数字化领域,三维城市模型是地理信息系统(GIS)和虚拟现实(VR)应用中的重要组成部分。它们能够真实地再现城市的建筑、道路、地形等元素,为城市规划、环境分析、灾害模拟...
《数学模型》是一本系统阐述数学建模方法和应用的教材,由高教出版社在2003年出版了第三版。本书的作者姜启原教授在其著作中深入浅出地介绍了数学模型的建立和应用过程,以及数学模型的种类和特点,旨在培养读者的...
一款超轻量级、支持几十种三维模型格式的轻量级模型浏览器,目前支持windows版,支持gltf/glb模型及三维动画、蒙皮、fbx动画、osgb、x等几十种模型浏览和简单转换。可保存gltf、glb、osg、fbx、obj、3ds等格式。实现...
【基于Matlab的三维地球模型】是一个利用MATLAB强大的图形处理能力和数学计算功能构建的可视化应用。这个模型允许用户在三维空间中观察地球,并且能够动态地旋转地球模型,同时还可以模拟卫星在其周围的运动轨迹,为...
详细的描述BA网络模型的构建,此程序基于matlab软件,为初学者提供一些指导
本文将深入探讨标题和描述中提及的“CAD三维长方体随机孔隙模型”以及其与无干涉球体的关系,以及如何利用这些模型在COMSOL等软件中进行孔隙模拟。 首先,CAD三维长方体随机孔隙模型是一种通过计算机设计的几何模型...
三维模型在现代数字媒体、游戏开发、建筑可视化和虚拟现实等领域中扮演着至关重要的角色。在给定的压缩包文件中,我们有三种不同格式的三维模型:`city.gltf`、`city.mtl` 和 `city.obj`。下面将详细介绍这三个文件...