封装类
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 };
使用:
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);