首页 > 其他分享 >Qt模型视图结构4_代理

Qt模型视图结构4_代理

时间:2023-02-01 22:55:56浏览次数:35  
标签:index const Qt 代理 视图 editor QWidget QModelIndex

代理说明

代理使用的类为QStyledItemDelegate.自定义代理需要实现以下4个函数:

图片名称

自定义代理四个函数的说明

四个函数的原型:

virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
  1. createEditor函数返回的是QWidget,因此可创建的代理可以是多个控件的组合。
  2. 数据保存到模型
    setModeldata函数在当前item失去焦点后被调用,而不是从下拉框中选中某项即可选中。另外,在关闭窗口后也会调用此函数,将最后的设置保存到模型中。
    QStandardItemModel中有itemChanged信号,当当前item被修改后发射信号,信号的发送在setModeldata函数调用之前,因此也则可以在此保存模型中修改的参数。

自定义代理的关键代码

QWidget *QWComboBoxDelegate::createEditor(QWidget *parent,
       const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QComboBox *editor = new QComboBox(parent);
    editor->addItem("优");
    editor->addItem("良");
    editor->addItem("一般");
    editor->addItem("不合格");
    return editor;
}

//将模型的数据设置到代理控件中
void QWComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QString str = index.model()->data(index, Qt::EditRole).toString();
    QComboBox *comboBox = static_cast<QComboBox*>(editor);
    comboBox->setCurrentText(str);
}

//将代理控件的选择数据设置到模型中
void QWComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QComboBox *comboBox = static_cast<QComboBox*>(editor);
    QString str = comboBox->currentText();
    model->setData(index, str, Qt::EditRole);
}

void QWComboBoxDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}

设置代理的关键代码

ui->tableView->setItemDelegate(QAbstractItemDelegate *delegate)//设置所有的单元格
ui->tableView->setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate);//设置固定的列的代理
ui->tableView->setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)//设置固定行的代理

标签:index,const,Qt,代理,视图,editor,QWidget,QModelIndex
From: https://www.cnblogs.com/wsw2022/p/17084405.html

相关文章

  • Qt实现多线程编程的两种方式
    Qt实现多线程编程的两种方式方式一:继承自QThread类,覆写run函数。此实现方法只有run函数内的代码是运行在子线程内。代码示例:#ifndefQDEMOTHREAD_H#defineQDEMOTHREAD_H#i......
  • 交叉编译并移植tslib-1.21和QT4.8.5运行第一个嵌入式Qt程序
    嵌入式linux平台交叉编译并移植QT4.8.5运行第一个嵌入式Qt程序开发环境:ubuntu1404-i686TQ2440开发板(samsungs3c2440)天嵌官方交叉编译器(版本4.3.3)qt-everywhere-opensourc......
  • Qt模型视图结构3_模型索引与模型的常用函数
    目录前言模型索引相关函数模型索引与模型访问和修改数据项的方法前言在数据项、模型以及视图三者之间,模型索引扮演着至关重要的角色。因此在此将模型索引的函数列举一下......
  • QTcpServer和QTcpSocket使用详解
    QTcpServer和QTcpSocket使用详解1、基本使用方法QTcpServer和QTcpSocket的使用是密不可分的,所以两者一块演示使用方法。QTcpServer常用信号:newConnection()信号,该信号用于处......
  • Qt设置应用程序图标、小图标显示+打包发布exe
    Qt设置应用程序图标、小图标显示+打包发布exe目录​​Qt设置应用程序图标、小图标显示+打包发布exe​​​​(一)设置应用程序图标、小图标​​​​(二)打包发布exe程序​​​​(......
  • PyQt5打包成exe可执行程序
    PyQt5打包成exe可执行程序安装打包程序:pipinstallpyInstaller打包命令格式:​​​pyinstaller[选项]文件名​​选项:-F,–onefile打包成一个单独的exe文件,类似于C语言的静......
  • Qt | 拖放、拖动的使用、将文件拖入使用示例
    Qt|拖放、拖动的使用、将文件拖入使用示例1、窗体的拖动Qt的控件本身支持了很强大拖放、拖动功能,对于窗体的拖动,例如QDialog,可以覆写这四个函数:voiddragEnterEvent(QDrag......
  • QTableView的样式设置和常用函数
    QTableView用于显示二维数据,常常与QStandardItemModel结合使用。目录样式设置表头样式设置表头样式设置注意事项表格样式设置常用函数model相关tableView相关headerView......
  • Qt | QDialogButtonBox使用示例
    Qt|QDialogButtonBox使用示例1、简介QDialogButtonBox类,该类包含很多按钮控件,在窗体(widget)或者对话框(dialog)有多个按钮的时候,为方便管理就可以使用该类成组进行管理。......
  • Qt | QListWidgetItem返回错误的背景颜色(始终返回颜色值为0)问题解决
    Qt|QListWidgetItem返回错误的背景颜色(始终返回颜色值为0)问题解决使用场景:程序使用QListWidget显示一个列表,这个列表具有点击选择和再次点击取消选择的功能,点击之后需要更......