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

【转载】Qt中QStyledItemDelegate的使用(一)

Qt中的代理是用于常见的QTreeView、QListView和QTableView中的一个小工具,它控制视图中每一项的显示方式。当然Qt还提供了QColumnView可供使用,但是我对它不太熟不知道该视图能不能编辑。为了方便开发者自定义项目的显示方式,减少自定义项目带来的需修改的代码量,Qt提供了代理的功能。其中一个名为QStyledItemDelegate的代理可以自定义项目处于编辑状态时的显示方式。比如双击某一项目时用自己的编辑框代替系统默认的编辑框。

QStyledItemDelegate是Qt推荐使用的代理,和它相似的还有QItemDelegate可以用。如果你想修改整个视图的显示方式,请采用自定义视图的方式而不是自定义代理。下面我将给出一个关于QStyledItemDelegate的简单例子给初学者参考。下面的代码测试环境是VS2017和Qt5.9。代码运行效果如下。从图中可看出,复选框代替了编辑状态下系统默认的编辑框:

image

 头文件:

 1 namespace Qt
 2 {
 3     enum CheckDataRole
 4     {
 5         ResultRole = Qt::UserRole, /* 自定义的Role,用来放布尔类型的编辑结果 */
 6     };
 7 }
 8 
 9 class MCheckDelegate : public QStyledItemDelegate
10 {
11     Q_OBJECT
12 
13 public:
14     explicit MCheckDelegate(QObject *parent = 0);
15     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
16     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
17     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
18     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
19 };

CPP文件:

 1 MCheckDelegate::MCheckDelegate(QObject *parent) :
 2     QStyledItemDelegate(parent)
 3 {
 4 }
 5 
 6 QWidget *MCheckDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
 7 {
 8     const QString style = u8R"(QCheckBox {
 9         padding-left: 4px;
10         background-color: white;
11         })";
12     QCheckBox* cbBox = new QCheckBox(u8"启用/禁用", parent);
13     cbBox->setStyleSheet(style);
14     return cbBox;
15 }
16 
17 void MCheckDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
18 {
19     QCheckBox* cbWidget = dynamic_cast<QCheckBox*>(editor);
20     cbWidget->setChecked(index.data(Qt::DisplayRole).toString() == u8"启用");
21 }
22 
23 void MCheckDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
24 {
25     bool state = dynamic_cast<QCheckBox*>(editor)->isChecked();
26     model->blockSignals(true);
27     model->setData(index, state ? u8"启用" : u8"禁用", Qt::DisplayRole);
28     model->blockSignals(false);
29     model->setData(index, state, Qt::ResultRole);
30 }
31 
32 void MCheckDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
33 {
34     editor->setGeometry(option.rect);
35 }

主窗口构造函数代码如下。本例中QtTest是主窗口类,ui.tvHost是QTableView控件:

 1 QtTest::QtTest(QWidget *parent)
 2     : QMainWindow(parent)
 3 {
 4     ui.setupUi(this);
 5 
 6     ui.tvHost->setItemDelegateForColumn(0, new MCheckDelegate(ui.tvHost));
 7     QStandardItemModel* model = new QStandardItemModel(ui.tvHost);
 8     model->setHorizontalHeaderLabels({ u8"状态", u8"说明" });
 9     model->setVerticalHeaderLabels({ u8"设备1", u8"设备2", u8"设备3", u8"设备4" });
10     model->setColumnCount(2);
11     model->setRowCount(4);
12     for (int i = 0; i < 4; i++)
13     {
14         model->setItem(i, 0, new QStandardItem(u8"启用"));
15         model->setItem(i, 1, new QStandardItem(u8"说明文字"));
16     }
17     ui.tvHost->setModel(model);
18 }

转载自:https://www.cnblogs.com/mengxiangdu/p/17815515.html

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

相关文章:

  • 2025年聚合物修补料销售厂家推荐,精选修补料砂浆供应商 - 讯息观点
  • 学习路线
  • 当代体系化国学传播奠基人叶无为(字号零) 为国学新时代传承与发展开辟新道路 - 资讯焦点
  • 【Prompt 3】:用更通俗易懂的方式解释
  • QStyledItemDelegate
  • 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锡膏冷藏回温一体机选哪家?精准匹配您的生产需求 - 栗子测评