QTableView 增加Combox

 

封装类

 1 #include <QObject>
 2 #include <QComboBox>
 3 #include <QStyledItemDelegate>
 4 class DynamicComboBoxDelegate : public QStyledItemDelegate {
 5     Q_OBJECT
 6 public:
 7     explicit DynamicComboBoxDelegate(const QStringList& items, QObject* parent = nullptr)
 8         : QStyledItemDelegate(parent), m_items(items) {
 9     }
10 
11     void setItems(const QStringList& items) {
12         m_items = items;
13     }
14   //正常运行不会调用,当点击对应控件的时候就会调用
15     QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option,
16         const QModelIndex& index) const override {
17         QComboBox* editor = new QComboBox(parent);
18         editor->addItems(m_items);
19         return editor;
20     }
21 
22     // ... 其他方法同上
23 
24 private:
25     QStringList m_items;
26 };

 

使用:(这种整个一列都是combox)

 1 DynamicComboBoxDelegate* delegate = new DynamicComboBoxDelegate(
 2     { u8"", u8"", u8"其他" }, ui.tableView);
 3 ui.tableView->setItemDelegateForColumn(1, delegate);
 4 
 5 QStandardItemModel* model = new QStandardItemModel(5, 3, ui.tableView);
 6 
 7 // 设置表头
 8 model->setHorizontalHeaderLabels({ u8"姓名",u8"性别", u8"状态" });
 9 
10 model->setItem(0, 0, new QStandardItem(codec->toUnicode("张三")));
11 model->setItem(0, 1, new QStandardItem(codec->toUnicode("")));
12 model->setItem(0, 2, new QStandardItem(codec->toUnicode("22")));
13 // 为第1行第0列的单元格设置数据和文本
14 model->setItem(1, 0, new QStandardItem(codec->toUnicode("张三1")));
15 model->setItem(1, 1, new QStandardItem(codec->toUnicode("")));
16 model->setItem(1, 2, new QStandardItem(codec->toUnicode("221")));
17 
18 ui.tableView->setModel(model);

 

posted @ 2025-12-02 16:21  家煜宝宝  阅读(1)  评论(0)    收藏  举报