目录:
(一) 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编程语言来构建这样的...
三维模型库的建筑信息化模型(BIM)的英文全称是Building Information Modeling,是一个完备的信息模型,能够将工程项目在全生命周期中各个不同阶段的工程信息、过程和资源集成在一个模型中,方便的被工程各参与方...
【初音MMD模型——三妈式Miku】 初音未来(Miku Hatsune)是全球知名的虚拟歌手,她在音乐创作领域拥有大量的粉丝。Miku的3D模型,特别是Miku Miku Dance(MMD)模型,是许多爱好者进行动画制作、舞蹈模拟和创意...
在这个例子中,我们创建了一个`GeneratorUNet`类的实例,这是一个生成对抗网络(GAN)中使用的生成器模型。 效果展示部分并没有具体展现,不过可以想象,通过这种方式可视化出来的模型,将是一个节点清晰、连接明确...
针对上述问题,推荐使用3dsMax9作为三维模型制作软件,并安装相应的导出插件SuperMapMaxPlugin7C进行模型的导出工作。在操作过程中,要注意文件的组织和路径设置,确保贴图和材质在导出时能被正确引用和识别。 在...
该“gltf格式警车三维模型”是专为这些目的设计的,提供了一个逼真的警车模型,可以在各种项目中使用。这个模型可能是由专业3D艺术家使用像Blender、Maya或3ds Max这样的3D建模软件创建的,然后通过专门的导出工具...
**obj格式3d模型**是计算机图形学领域中广泛使用的文件格式,用于存储3D几何数据和相关的表面信息。这个格式是由Wavefront Technologies为他们的Advanced Visualizer软件开发的,因此通常被称为Wavefront obj格式。...
在这里,我们将深入探讨`select`在网络模型中的应用,以及如何在实际代码中使用它。 首先,`select`函数是跨平台的,可以在Unix/Linux和Windows等操作系统中使用,提供了一种多路复用I/O的方式。它的基本原理是,将...
【基于C++的三维模型体素化程序】是一种在计算机图形学领域中常见的技术,它将复杂的三维模型转化为由立方体(voxels)组成的网格结构。这种技术在游戏开发、虚拟现实、3D打印和医学成像等领域有着广泛应用。本文将...
《数学模型》是一本系统阐述数学建模方法和应用的教材,由高教出版社在2003年出版了第三版。本书的作者姜启原教授在其著作中深入浅出地介绍了数学模型的建立和应用过程,以及数学模型的种类和特点,旨在培养读者的...
详细的描述BA网络模型的构建,此程序基于matlab软件,为初学者提供一些指导
三维模型在现代数字媒体、游戏开发、建筑可视化和虚拟现实等领域中扮演着至关重要的角色。在给定的压缩包文件中,我们有三种不同格式的三维模型:`city.gltf`、`city.mtl` 和 `city.obj`。下面将详细介绍这三个文件...
完成所有计算后,使用`quiver3`函数绘制三维矢量场,可视化涡流场的速度分布。这样,用户可以直观地看到涡旋的结构和动态行为。 总结来说,Matlab实现三维涡流场模型涉及的主要知识点包括: 1. 三维坐标网格的创建...
`Sequence`是Keras提供的一种预定义的生成器,它确保了多线程训练过程中的线性可预测性。你可以通过继承`Sequence`并重写`__getitem__`和`__len__`方法来自定义数据生成。 **6. 自定义生成器函数** 如果你的数据流...
CHT9024-2014三维地理信息模型数据产品质量检查与验收
三维模型布尔运算是一种在计算机图形学中广泛使用的高级技术,特别是在3D建模软件和游戏开发中。布尔运算源于数学中的布尔代数,它允许我们将多个几何体进行组合,通过求并、交、差操作来创建更复杂的形状。在3D建模...
本文将深入探讨基于隐语义模型(Latent Semantic Models, LSMs)的电商推荐系统的设计与实现,旨在为用户提供更加个性化、精准的商品推荐。 隐语义模型起源于信息检索领域,用于处理词汇表中的语义鸿沟问题。在电商...