新网站怎么运营,wordpress 企业内网,中信建设有限责任公司钱三强,网站建设验收程序一、模型/视图结构概述
基本原理#xff1a; Qt 的模型/视图#xff08;Model/View#xff09;架构将数据的存储和显示分离#xff0c;提高了代码的可维护性和复用性。模型#xff08;Model#xff09;#xff1a;负责存储和管理数据#xff0c;提供数据的访问接口 Qt 的模型/视图Model/View架构将数据的存储和显示分离提高了代码的可维护性和复用性。模型Model负责存储和管理数据提供数据的访问接口如获取数据、插入数据、修改数据、删除数据等。视图View负责显示数据不关心数据的存储和操作只根据模型的数据进行显示。代理Delegate负责在视图中渲染和编辑数据项提供了一种机制来定制数据的显示和编辑方式例如使用自定义的部件进行数据的编辑。
二、QAbstractItemModel 类
功能 是所有项模型的抽象基类定义了项模型必须实现的接口如 rowCount、columnCount、data、setData 等用于提供数据的存储和操作接口。可以自定义继承自 QAbstractItemModel 的模型类以满足不同的数据存储和操作需求。
三、QAbstractItemView 类
功能 是所有项视图的抽象基类提供了显示数据的通用接口如 setModel 用于关联一个模型视图会根据模型的数据进行显示和更新。常见的派生类有 QListView、QTreeView、QTableView 等分别用于列表、树状、表格形式的数据显示。
四、QStringListModel 类及示例程序功能实现
功能 存储一个字符串列表方便地用于 QListView 和 QComboBox 等视图的数据显示。
#include QApplication
#include QListView
#include QStringListModelint main(int argc, char *argv[])
{QApplication app(argc, argv);QStringListModel *model new QStringListModel;QStringList stringList;stringList Item 1 Item 2 Item 3;model-setStringList(stringList);QListView *listView new QListView;listView-setModel(model);listView-show();return app.exec();
}代码解释 创建一个 QStringListModel 并添加一些字符串元素。创建一个 QListView 并将 QStringListModel 设置为其模型QListView 将显示字符串列表中的元素。
五、自定义代理
自定义代理功能 允许用户自定义数据在视图中的显示和编辑方式例如使用自定义的部件进行数据的编辑或者添加一些特定的显示效果。
六、QStyledItemDelegate 类及设计自定义代理类
功能 提供了默认的数据项显示和编辑功能可作为自定义代理的基类。
#include QApplication
#include QListView
#include QStyledItemDelegate
#include QPainter
#include QStyleOptionViewItemclass CustomDelegate : public QStyledItemDelegate
{
protected:void paint(QPainter *painter, const QStyleOptionViewItem option, const QModelIndex index) const override{QStyleOptionViewItem opt option;initStyleOption(opt, index);// 自定义绘制painter-save();painter-setPen(Qt::red);painter-drawText(opt.rect, Qt::AlignCenter, index.data().toString());painter-restore();}QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem option, const QModelIndex index) const override{// 创建自定义编辑器QLineEdit *editor new QLineEdit(parent);return editor;}void setEditorData(QWidget *editor, const QModelIndex index) const override{QLineEdit *lineEdit qobject_castQLineEdit*(editor);if (lineEdit) {lineEdit-setText(index.data().toString());}}void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex index) const override{QLineEdit *lineEdit qobject_castQLineEdit*(editor);if (lineEdit) {model-setData(index, lineEdit-text());}}void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem option, const QModelIndex index) const override{editor-setGeometry(option.rect);}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);QStringListModel *model new QStringListModel;QStringList stringList;stringList Item 1 Item 2 Item 3;model-setStringList(stringList);QListView *listView new QListView;listView-setModel(model);CustomDelegate *delegate new CustomDelegate;listView-setItemDelegate(delegate);listView-show();return app.exec();
}代码解释 自定义 CustomDelegate 类继承自 QStyledItemDelegate。paint 方法用于自定义数据项的绘制这里将文本绘制为红色。createEditor 方法创建自定义的编辑部件这里是 QLineEdit。setEditorData 方法将模型数据设置到编辑器中。setModelData 方法将编辑器的数据更新到模型中。updateEditorGeometry 方法设置编辑器的位置和大小。
七、QFileSystemModel 和 QTreeView 类及示例程序功能实现
功能 QFileSystemModel 提供了文件系统的数据模型可以显示文件和目录。QTreeView 可以用来显示 QFileSystemModel 提供的数据。
#include QApplication
#include QTreeView
#include QFileSystemModelint main(int argc, char *argv[])
{QApplication app(argc, argv);QFileSystemModel *model new QFileSystemModel;model-setRootPath(QDir::homePath());QTreeView *treeView new QTreeView;treeView-setModel(model);treeView-setRootIndex(model-index(QDir::homePath()));treeView-show();return app.exec();
}代码解释 创建 QFileSystemModel 并设置根路径为用户的主目录。创建 QTreeView 并将 QFileSystemModel 设置为其模型。将 QTreeView 的根索引设置为用户主目录使其显示用户主目录下的文件和目录结构。