• QTableWidget设置代理 添加QCombox


    一、实现功能:向QTableWidget上添加QCombox

      显示效果:双击鼠标才显示Combox组件

      如下图所示:未双击效果图

        

      双击效果图:

        

    二、向第二列添加combox代码如下  

    1 ui.tableWidget_TestItems->verticalHeader()->setVisible(false);//隐藏垂直表头
    2 ui.tableWidget_TestItems->setSelectionBehavior(QAbstractItemView::SelectRows);//选择一行
    3 setItemIsEditable(ui.tableWidget_TestItems, 0);//禁止表格编辑
    4 setItemIsEditable(ui.tableWidget_TestItems, 2);
    5 setItemIsEditable(ui.tableWidget_TestItems, 3);
    6 ui.tableWidget_TestItems->setItemDelegateForColumn(1, new Delegate(this));//添加QCombox代理

    三、封装Delegate类

      

     1 #ifndef DELEGATE_H
     2 #define DELEGATE_H
     3 
     4 #include <QStyledItemDelegate>
     5 #include <QItemDelegate>
     6 #include <QModelIndex>
     7 #include <QPainter>
     8 #include <QWidget>
     9 
    10 #define  COMBOXCOL 1
    11 class Delegate : public QItemDelegate
    12 {
    13     Q_OBJECT
    14 
    15 public:
    16     Delegate(QObject *parent = nullptr);
    17     ~Delegate();
    18 
    19     void paint(QPainter *painter, const QStyleOptionViewItem &option,
    20                     const QModelIndex &index) const;
    21     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
    22 
    23     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,    
    24                                         const QModelIndex &index) const;
    25     void setEditorData(QWidget *editor, const QModelIndex &index) const;
    26     void setModelData(QWidget *editor, QAbstractItemModel *model, 
    27                                     const QModelIndex &index) const;
    28 
    29 private:
    30 
    31 };
    32 
    33 #endif // DELEGATE_H
     1 #include "Delegate.h"
     2 #include <QComboBox>
     3 
     4 Delegate::Delegate(QObject *parent)
     5     : QItemDelegate(parent)
     6 {
     7 
     8 }
     9 
    10 Delegate::~Delegate()
    11 {
    12 
    13 }
    14 void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
    15     const QModelIndex &index) const
    16 {
    17     QItemDelegate::paint(painter, option, index);
    18 }
    19 
    20 QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
    21 {
    22     return QItemDelegate::sizeHint(option, index);
    23 }
    24 
    25 QWidget *Delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, 
    26                                                    const QModelIndex &index) const
    27 {
    28     if (index.isValid() && index.column() == COMBOXCOL)
    29     {
    30         QComboBox *editor = new QComboBox(parent);
    31         editor->setEditable(true);
    32         editor->installEventFilter(const_cast<Delegate *>(this));
    33         return editor;
    34     }
    35     else
    36     {
    37         return QItemDelegate::createEditor(parent, option, index);
    38     }
    39 }
    40 
    41 void Delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
    42 {
    43     if (index.isValid() && index.column() == COMBOXCOL)
    44     {
    45         QString value = index.model()->data(index, Qt::DisplayRole).toString();
    46         QComboBox *combox = static_cast<QComboBox *>(editor);
    47         combox->addItem("+");
    48         combox->addItem("+2");
    49         combox->addItem("+3");
    50         combox->addItem("+4");
    51         combox->setCurrentText(value);
    52     }
    53     else
    54     {
    55         QItemDelegate::setEditorData(editor, index);
    56     }
    57 }
    58 
    59 void Delegate::setModelData(QWidget *editor, QAbstractItemModel *model,
    60                                              const QModelIndex &index) const
    61 {
    62     if (index.isValid() && index.column() == COMBOXCOL)
    63     {
    64         QComboBox *combox = static_cast<QComboBox *>(editor);
    65         model->setData(index, combox->currentText());
    66     }
    67     else
    68     {
    69         QItemDelegate::setModelData(editor, model, index);
    70     }
    71 }

      

  • 相关阅读:
    几种任务调度的 Java 实现方法与比较
    nginx配置
    生产消费_lock和阻塞队列
    阻塞队列
    countdownlatch+cyclicbarrier+semphore
    01背包
    skiplist
    lru
    按序打印_lock和condition
    按序打印_volatile 无法保证顺序
  • 原文地址:https://www.cnblogs.com/jiangson/p/6900255.html
Copyright © 2020-2023  润新知