- 浏览: 3415908 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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)
- 下载次数: 196
评论
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 4123Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4895看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 20969最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2762一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21166一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17792QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8455FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43001.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4617最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4798Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9603QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 22854双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8347创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14717前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12101为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5527不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2125Test<IMG SRC="cf08e32c2 ...
相关推荐
NULL 博文链接:https://qimo601.iteye.com/blog/1536464
学习QT时,参照网上的例子完成的小程序,主要是练习之用,不当之处在所难免。希望对初学者有帮助。 关联技术: 1.SQLite数据库的连接,建库,建表 2.QSqlTableModel / QDataWidgetMapper / QItemDelegate等类的使用 ...
QT中delegate自定义委托的小例子,有注释说明和源码 简单基础部件的委托可以继承QItemDelegate,并使用这些函数的默认实现,委托编辑器可以通过使用小工具来管理编辑过程或直接处理事件来实现。 使用Delegate的原因...
虽然为了这个目的我们设置了一个自定义的基于整数的表模型,我们可以很容易地使用QStandardItemModel来代替,因为自定义委托控制数据输入。我们构造了一个表视图来显示模型的内容,可以使用自定义的委托来进行编辑。
《C++ Qt开发:QItemDelegate自定义代理组件》文章课件
自定义委托类,重写QItemDelegate中的5个函数并用于模型实例.
QTableView 中单元格添加控件的实例代码
QT中代理Delegates使用实例代码,可运行,多种编辑方式,有下列框,日期、QSpinBox,界面显示一看就懂!代码无buge,如果对你有帮助请给好评,有问题可以私信联系我