- 浏览: 3445997 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
SpinBoxDelegate例子是Qt Assistant中提供的一个非常优秀的例子,虽然讲的是继承于QItemDelegate的例子。但对于我们理解Delegate-委托这个概念,非常有帮助。
它重载了必须的几个函数:
(1) QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const;
(2) void setEditorData(QWidget *editor, const QModelIndex &index) const;
(3) void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const;
(4) void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &index) const;
下面把源码附上,并加上部分注释。附件有源码可以下载。
Main.cpp
#include <QApplication> #include <QHeaderView> #include <QItemSelectionModel> #include <QStandardItemModel> #include <QTableView> #include "delegate.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); //构建一个4行,2列的项模型 QStandardItemModel model(4, 2); //声明一个TableView QTableView tableView; //绑定模型 tableView.setModel(&model); //声明一个委托 SpinBoxDelegate delegate; //设定视图的委托 tableView.setItemDelegate(&delegate); //ensuring that the view does not waste any of the space assigned to it for its header //最后一列全部填充View tableView.horizontalHeader()->setStretchLastSection(true); //初始化Model for (int row = 0; row < 4; ++row) { for (int column = 0; column < 2; ++column) { QModelIndex index = model.index(row, column, QModelIndex()); model.setData(index, QVariant((row+1) * (column+1))); } } tableView.setWindowTitle(QObject::tr("Spin Box Delegate")); tableView.show(); return app.exec(); }
delegate.h
#ifndef DELEGATE_H #define DELEGATE_H #include <QItemDelegate> #include <QModelIndex> #include <QObject> #include <QSize> #include <QSpinBox> class SpinBoxDelegate : public QItemDelegate { Q_OBJECT public: SpinBoxDelegate(QObject *parent = 0); //返回一个编辑控件,用来编辑指定项的数据 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; //将Model中数据赋值到控件上 void setEditorData(QWidget *editor, const QModelIndex &index) const; //设定模型数据,根据指定项中对应编辑控件的数据 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; //更新编辑框几何形状 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; #endif
delegate.cpp
#include <QtGui> #include "delegate.h" SpinBoxDelegate::SpinBoxDelegate(QObject *parent) : QItemDelegate(parent) { } //返回一个编辑控件,用来编辑指定项的数据 QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const { //返回该QSpinBox控件 QSpinBox *editor = new QSpinBox(parent); editor->setMinimum(0); editor->setMaximum(100); return editor; } //将Model中数据赋值到控件上 void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { //返回该索引的模型,继而返回该模型中此索引的编辑角色数据 int value = index.model()->data(index, Qt::EditRole).toInt(); //给控件赋值 QSpinBox *spinBox = static_cast<QSpinBox*>(editor); spinBox->setValue(value); } //设定模型数据,根据指定项中对应编辑控件的数据 void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QSpinBox *spinBox = static_cast<QSpinBox*>(editor); spinBox->interpretText(); int value = spinBox->value(); //设置模型的数据 model->setData(index, value, Qt::EditRole); } //更新编辑框几何形状 void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { //根据option,设置编辑框位置 editor->setGeometry(option.rect); }
- spinboxdelegate.rar (15.3 KB)
- 下载次数: 197
评论
4 楼
sonichy
2017-06-27
Qt5改动很多,要改改了。
3 楼
少卿名宁
2015-06-23
2 楼
December_Lin
2014-06-20
如果里面是checkbox控件呢?不用重载paint函数,写完之后发现只有点击的时候才会显示出checkbox控件
1 楼
marsz1990
2012-12-13
不错 多谢解说
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4215Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4991看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 21121最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2858一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21381一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17894QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8591FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43821.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4693最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4866Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9676QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 23101双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8446创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14863前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12204为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5593不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2190Test<IMG SRC="cf08e32c2 ...
相关推荐
在本例"基于QItemDelegate的例子2 trackeEditorDelegate"中,我们将深入探讨如何使用QItemDelegate来创建一个定制的编辑器,以便在表格视图中编辑特定类型的数据显示。 首先,QItemDelegate是一个抽象类,它提供了...
1. **ProjectModel.cpp**: 这个文件可能包含了项目的模型,它是数据结构的核心部分,负责存储和管理项目中的任务、里程碑和依赖关系。在自定义Gantt图中,这个模型会提供必要的数据,如任务名称、开始日期、结束日期...
在Qt中,代理(QItemDelegate)和委托(QSortFilterProxyModel)是两个关键概念,它们对于实现复杂的数据显示和交互功能至关重要。本文将深入探讨这两个概念,并结合自定义开关控件进行讲解。 首先,让我们了解...
`QItemDelegate`是QT提供的一种基础委托类,我们可以基于它进行扩展,以适应各种特定的需求。 在"Delegates.7z"这个压缩包中,提供的是一系列使用`QT`中的`Delegates`的实例代码。这些代码涵盖了多种编辑方式,包括...
在本项目"QT自定义混合控件——基于View/Model/Delegate的QTableView/QTreewidget/Combobox实现"中,我们将深入探讨如何利用QT库中的核心组件构建一个强大的数据展示和交互界面。 首先,我们要理解View/Model/...
1. 继承QItemDelegate并重写`paint()`方法,以自定义单元格的绘制,比如添加背景色、边框、图标等。 2. 实现`createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index)`,创建...
1. `paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const`:此方法负责绘制表格中的项。你可以在这里设置自定义的背景、前景颜色,或者绘制特殊的图形。 2. `sizeHint...
学习QT时,参照网上的例子完成的小程序,主要是练习之用,不当之处在所难免。希望对初学者有帮助。 关联技术: 1.SQLite数据库的连接,建库,建表 2.QSqlTableModel / QDataWidgetMapper / QItemDelegate等类的使用 ...
在Qt框架中,`QTableView`是用于展示二维表格数据的控件,它基于`QAbstractItemView`类。在一些复杂的应用场景中,我们可能需要在`QTableView`的单元格内添加自定义的控件,比如按钮、下拉框等,以提供更丰富的交互...
QT中delegate自定义委托的小例子,有注释说明和源码 简单基础部件的委托可以继承QItemDelegate,并使用这些函数的默认实现,委托编辑器可以通过使用小工具来管理编辑过程或直接处理事件来实现。 使用Delegate的原因...
SpinBoxDelegate *spinDelegate = new SpinBoxDelegate(this); tableView->setItemDelegateForColumn(含有整数的列索引, spinDelegate); ``` 以上就是Qt5中实现自定义代理,尤其是针对日期选择和旋钮框的基本方法。...
1. 创建自定义的QHeaderView子类,重写必要的方法以满足特定需求。 2. 创建自定义的QItemDelegate子类,处理单元格的显示和编辑。 3. 将自定义的QHeaderView和QItemDelegate应用到QTableView上,通过`...
3. **排序和分页**:支持基于某一列的数据排序,以及通过代理实现分页功能。 4. **数据编辑**:默认情况下,用户可以直接点击单元格进行编辑,也可以自定义编辑行为。 代理(QItemDelegate)在模型视图架构中起到...
### 1. 自定义委托(QItemDelegate) `QItemDelegate`是Qt提供的一种机制,允许我们为`QTableView`、`QListView`和`QTreeView`等组件中的每个项定义自己的显示和编辑行为。通过继承`QItemDelegate`并重写其关键方法...
3. **第一个QtGUI应用**:本节将会引导读者通过简单的例子创建第一个基于Qt的GUI应用程序,从而对Qt的开发环境和工具有一个初步的认识。 #### 第二章 布局管理器 1. **QHBoxLayout与QVBoxLayout**:Qt中的布局管理...
1. **理解QItemDelegate** `QItemDelegate`是Qt中的一个类,它是模型视图架构的一部分。它的主要职责是代表模型中的每个数据项,并控制它们在视图中的呈现。`QItemDelegate`提供了默认的渲染和编辑行为,但通常需要...
虽然为了这个目的我们设置了一个自定义的基于整数的表模型,我们可以很容易地使用QStandardItemModel来代替,因为自定义委托控制数据输入。我们构造了一个表视图来显示模型的内容,可以使用自定义的委托来进行编辑。
"Qt ModelView 演示"项目着重展示了`QItemDelegate`的使用,这是一个关键组件,允许我们对QTableView、QListView和QTreeView等视图组件进行自定义渲染和编辑行为。 首先,我们要理解Qt的Model/View编程模型。该模型...
在Qt框架中,QComboBox是一个常用的控件,用于在下拉列表中显示可选择的项目。这个控件在用户界面设计中非常常见,比如在创建一个应用时,如果...希望这个例子能帮助你理解如何在Qt中有效地利用QComboBox及其委托机制。
它通过连接到一个数据模型(如QStandardItemModel或QAbstractTableModel)来显示数据,并通过QItemDelegate来控制单元格的渲染和编辑行为。因此,自定义QTableView的核心在于创建一个继承自QStyledItemDelegate的...