当前位置: 首页 > news >正文

QStyledItemDelegate

view 中的编辑功能默认实现下是在该单元格处于编辑状态时才会实例化编辑组件,相关接口如下:

1 QWidget *createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const override;
2 void setEditorData(QWidget *editor, const QModelIndex &index) const override;
3 void setModelData(QWidget *editor,QAbstractItemModel *model,const QModelIndex &index) const override;
4 void updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,const QModelIndex &index) const override;

当双击进入编辑状态时,

调用 createEditor 在目标位置创建一个编辑组件,

通过 setEditorData 更新编辑组件的数据,

编辑完成后调用 setModelData 将结果设置回 model 中。

由于源码太长,只看下创建是如何实现的:

 1 QWidget *QStyledItemDelegate::createEditor(QWidget *parent,
 2                                      const QStyleOptionViewItem &,
 3                                      const QModelIndex &index) const
 4 {
 5     Q_D(const QStyledItemDelegate);
 6     if (!index.isValid())
 7         return nullptr;
 8     return d->editorFactory()->createEditor(index.data(Qt::EditRole).userType(), parent);
 9 }
10  
11 QWidget *QDefaultItemEditorFactory::createEditor(int userType, QWidget *parent) const
12 {
13     switch (userType) {
14 #if QT_CONFIG(combobox)
15     case QMetaType::Bool: {
16         QBooleanComboBox *cb = new QBooleanComboBox(parent);
17         cb->setFrame(false);
18         cb->setSizePolicy(QSizePolicy::Ignored, cb->sizePolicy().verticalPolicy());
19         return cb; }
20 #endif
21 #if QT_CONFIG(spinbox)
22     case QMetaType::UInt: {
23         QSpinBox *sb = new QUIntSpinBox(parent);
24         sb->setFrame(false);
25         sb->setMinimum(0);
26         sb->setMaximum(INT_MAX);
27         sb->setSizePolicy(QSizePolicy::Ignored, sb->sizePolicy().verticalPolicy());
28         return sb; }
29     case QMetaType::Int: {
30         QSpinBox *sb = new QSpinBox(parent);
31         sb->setFrame(false);
32         sb->setMinimum(INT_MIN);
33         sb->setMaximum(INT_MAX);
34         sb->setSizePolicy(QSizePolicy::Ignored, sb->sizePolicy().verticalPolicy());
35         return sb; }
36 #endif
37 #if QT_CONFIG(datetimeedit)
38     case QMetaType::QDate: {
39         QDateTimeEdit *ed = new QDateEdit(parent);
40         ed->setFrame(false);
41         return ed; }
42     case QMetaType::QTime: {
43         QDateTimeEdit *ed = new QTimeEdit(parent);
44         ed->setFrame(false);
45         return ed; }
46     case QMetaType::QDateTime: {
47         QDateTimeEdit *ed = new QDateTimeEdit(parent);
48         ed->setFrame(false);
49         return ed; }
50 #endif
51 #if QT_CONFIG(label)
52     case QMetaType::QPixmap:
53         return new QLabel(parent);
54 #endif
55 #if QT_CONFIG(spinbox)
56     case QMetaType::Double: {
57         QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
58         sb->setFrame(false);
59         sb->setMinimum(-DBL_MAX);
60         sb->setMaximum(DBL_MAX);
61         sb->setSizePolicy(QSizePolicy::Ignored, sb->sizePolicy().verticalPolicy());
62         return sb; }
63 #endif
64 #if QT_CONFIG(lineedit)
65     case QMetaType::QString:
66     default: {
67         // the default editor is a lineedit
68         QExpandingLineEdit *le = new QExpandingLineEdit(parent);
69         le->setFrame(le->style()->styleHint(QStyle::SH_ItemView_DrawDelegateFrame, nullptr, le));
70         if (!le->style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, nullptr, le))
71             le->setWidgetOwnsGeometry(true);
72         return le; }
73 #else
74     default:
75         break;
76 #endif
77     }
78     return nullptr;
79 }

参考资料:https://blog.csdn.net/gongjianbo1992/article/details/108687172

http://www.jsqmd.com/news/72937/

相关文章:

  • 2025年12月高压固态软启动柜厂家推荐:最新权威测评,技术力、规模化实测榜单 - AIEO
  • GPT-0: Attention+Transformer+可视化 - 详解
  • 2025年低速/高速离心机冷冻/医用/实验室离心机市场关于生产厂家,市场口碑等核心分析 - 品牌推荐大师1
  • 向量概念和运算规则笔记
  • 【Prompt 2】:提高产出效率
  • 2025 国内低代码平台 TOP10 科普:AI 融合成主流,企业选型不踩坑 - 品牌推荐排行榜
  • 免费好用还不限速?2025年12月远程控制软件实测:谁才是办公首选!
  • 2025 水分仪市场解析:水分仪推荐生产厂家/源头厂家/推荐供应商卡尔费休水分仪哪个牌子好/哪家好哪家性价比高/哪个公司口碑好 - 品牌推荐大师1
  • 2025 水分仪市场解析:水分仪推荐生产厂家/源头厂家/推荐供应商卡尔费休水分仪哪个牌子好/哪家好哪家性价比高/哪个公司口碑好 - 品牌推荐大师1
  • 2025年离心机国内知名厂家,离心机品牌排行推荐,离心机头部企业优质供应商,离心机有哪些厂 - 品牌推荐大师1
  • 2025年离心机国内知名厂家,离心机品牌排行推荐,离心机头部企业优质供应商,离心机有哪些厂 - 品牌推荐大师1
  • Curl → Python / YAML转换器
  • 2025必知!PET磨粉机厂家实力排行榜 - 栗子测评
  • 2025必知!PET磨粉机厂家实力排行榜 - 栗子测评
  • 【转载】Qt 使用委托QItemDelegate 于 QTableView单元格添加控件
  • 【转载】Qt 使用委托QItemDelegate 于 QTableView单元格添加控件
  • 2025航空障碍灯哪家好?航空障碍灯公司推荐盘点 - 栗子测评
  • 2025航空障碍灯品牌有哪些?航空障碍灯厂家推荐解析 - 栗子测评
  • 2025智能锡膏柜厂家推荐,展红锡膏机怎么样 - 栗子测评
  • 2025年12月有实力/质量好/口碑好/信用好的实验室通风柜实验台生产厂家有哪些? - 品牌推荐大师
  • 2025年12月企业境外投资备案/odi登记/境外投资备案/odi备案代理服务综合评估与推荐榜单 - 2025年11月品牌推荐榜
  • 2025年专业离心机厂家大盘点:从医疗离心机知名企业到国产源头厂家 - 品牌推荐大师1
  • 2025割草机连接器厂家推荐!深圳防水连接器厂家,适配性拉满 - 栗子测评
  • 2025年国产特种反应釜(高温高压反应釜/国产电化学高压反应釜/国产微型机械搅拌高压釜/国产氢化釜)十大品牌权威推荐指南 - 品牌推荐大师1
  • 2025锡膏冷藏回温一体机选哪家?精准匹配您的生产需求 - 栗子测评
  • 2025年国产平行/光催化/聚合/升降式反应釜供货商靠谱厂家有哪些,哪家售后好哪家技术强 - 品牌推荐大师1
  • 2025年12月企业境外投资备案/odi登记/境外投资备案/odi备案代理服务商综合推荐与选择指南 - 2025年11月品牌推荐榜
  • 每个单元格设置成不同的控件类型(案例) combox
  • 聚焦2025光伏防水连接器批发厂家:实力防水连接器公司推荐清 - 栗子测评
  • 多场景应用支持, AgenticHub如何根据业务需求定制智能体