#include 和 在FileView中添加工程文件的使用和区别(简化ClassView)

#include<文件>或#include"文件",意为添加系统文件或添加目录文件。这里添加到文件大多是以“.h”结尾的文件,这就是我们常 说的头文件,添加这个文件主要是用于编译的时候连接“.cpp”文件用的,其实我们最终用到的是“.cpp”文件,所以在VC编译时, 你就会看到编译器编译文件进程显示编译的往往都是“.cpp”文件。

FileView里添加工程文件,我们经常添加的都是“.h”和“.cpp”文件,其实这样做是非常正规的工程文件添加方式,但往往添加到 工程文件多了,特别是在某个“.h”文件里面有很多结构体声明时会让你的“ClassVeiw”显示出很多类(结构体也作为类显示), 这样会给你在做工程时添加不少的视觉和查找负担,看起来这个工程非常“臃肿”,不好管理。

有人就想,能不能把有些已经成型的类和结构体“去掉”(隐藏),但又不影响工程?
办法是有的,这就要理解“#include”和VC编译器的编译需求了。

简单理解两点:
一、#include用的是“.h”文件,“.h”联系的是“.cpp”文件,“.h” 文件可以在系统目录或用户指定目录里查找,但“.cpp”
文件无法由用户指定,必须由“.h”文件进行链接编译。
二、“.cpp”文件会在编译的时候调用,它才是工程运行时所需的东东,所以“.cpp”文件必须要装载到工程里边。

由以上两点可知,#include文件可以用户自己设定路径,让编译器自行搜索,“.cpp”文件必须要装载到工程里边,所以, FileView里添加工程文件时可以不需要添加“.h”文件,这样就不会在“ClassView”界面造成臃肿的画面了,但“.cpp”文件一定要添加。

ok,如此你的ClassView就会大大简化了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QML的ListView是用来展示列表数据的控件,而QAbstractListModel是Qt用来实现自定义数据模型的类。通过将二者配合使用,我们可以实现将自定义数据以列表的形式展示在QML界面。 下面是一个简单的例子,演示如何将Qt读取到的多个文件数据(含有QString和QImage)发送到QML的ListView显示。 1. 创建自定义数据模型 首先,我们需要创建一个继承自QAbstractListModel的自定义数据模型。这个数据模型需要实现以下几个方法: - rowCount():返回数据模型的行数; - data():返回指定行和角色的数据; - roleNames():返回数据模型所有角色的名称。 下面是一个示例的自定义数据模型,其包含了一个QString类型和一个QImage类型的数据: ```cpp class FileListModel : public QAbstractListModel { Q_OBJECT public: enum FileRoles { FileNameRole = Qt::UserRole + 1, ImageRole }; explicit FileListModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash<int, QByteArray> roleNames() const override; void addFile(const QString& fileName); private: struct FileData { QString fileName; QImage image; }; QList<FileData> m_files; }; ``` 2. 实现自定义数据模型的方法 接下来,我们需要实现自定义数据模型的方法。在这个例子,我们实现了rowCount()、data()和roleNames()方法,其roleNames()方法返回了两个角色的名称:FileNameRole和ImageRole。 ```cpp FileListModel::FileListModel(QObject *parent) : QAbstractListModel(parent) { } int FileListModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_files.count(); } QVariant FileListModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); const FileData& fileData = m_files[index.row()]; switch (role) { case FileNameRole: return fileData.fileName; case ImageRole: return QVariant::fromValue(fileData.image); default: return QVariant(); } } QHash<int, QByteArray> FileListModel::roleNames() const { QHash<int, QByteArray> roles; roles[FileNameRole] = "fileName"; roles[ImageRole] = "image"; return roles; } ``` 3. 在QML使用ListView展示数据 接下来,我们需要在QML使用ListView来展示自定义数据模型的数据。为了实现这个功能,我们需要将ListView的model属性设置为我们创建的自定义数据模型的实例。 下面是一个简单的QML界面,其包含了一个ListView和一个Delegate,用来展示自定义数据模型的数据: ```qml import QtQuick 2.0 ListView { id: fileView anchors.fill: parent model: fileModel delegate: Rectangle { width: 200; height: 200 color: "white" border.width: 2 border.color: "black" Image { source: image anchors.fill: parent fillMode: Image.PreserveAspectFit } Text { text: fileName font.bold: true font.pixelSize: 12 anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter padding: 5 } } } ``` 4. 将数据添加到自定义数据模型 最后,我们需要将Qt读取到的多个文件数据添加到自定义数据模型。下面是一个简单的示例代码,其通过addFile()方法将文件名和图像添加到自定义数据模型: ```cpp FileListModel fileModel; for (const QString& fileName : fileNames) { QImage image(fileName); if (image.isNull()) continue; fileModel.addFile(fileName); } QQmlApplicationEngine engine; engine.rootContext()->setContextProperty("fileModel", &fileModel); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; ``` 完整的代码如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值