参考Qt 例程"Spin Box Delegate Example", 自己实现了 QSpinBoxDelegate, QDoubleSpinBoxDelegate, QComboBoxDelegate 和 QDateEditDelegate四个类, 分别用于为QTableWidget 的单元格添加QSpinBox, QDoubleSpinBox, QComboBox 和 QDateEdit代理. 代码可从我的资源myTable.zip下载. 效果如下图所示:
关于这几个delegate类的使用参见 mainwindow.cpp 中的 tableWidgetInit() 函数:
void MainWindow::tableWidgetInit(QTableWidget *table)
{
// 设置选中整行
table->setSelectionBehavior(QAbstractItemView::SelectRows);
// 设置选中单行
table->setSelectionMode(QAbstractItemView::SingleSelection);
// 设置表头
QStringList headers;
headers << tr("ID") << tr("Name") << tr("Gender") << tr("Age") << tr("Weight") << tr("Birthday");
table->setColumnCount(headers.count());
table->setHorizontalHeaderLabels(headers);
QHeaderView *headerView = table->horizontalHeader();
headerView->setSectionResizeMode(QHeaderView::Stretch);
gender << tr("Male") << tr("Female");
QComboBoxDelegate * genderDelegate = new QComboBoxDelegate(this);
genderDelegate->addItems(gender);
table->setItemDelegateForColumn(2, genderDelegate);
QSpinBoxDelegate *ageDelegate = new QSpinBoxDelegate(this);
ageDelegate->setMinimum(0);
ageDelegate->setMaximum(200);
table->setItemDelegateForColumn(3, ageDelegate);
QDoubleSpinBoxDelegate *weightDelegate = new QDoubleSpinBoxDelegate();
weightDelegate->setMinimum(1);
weightDelegate->setMaximum(300);
weightDelegate->setDecimals(1);
table->setItemDelegateForColumn(4, weightDelegate);
QDateEditDelegate *birthdayDelegate = new QDateEditDelegate;
table->setItemDelegateForColumn(5, birthdayDelegate);
}
其中, QComboBoxDelegate 中的下拉列表项可以自由添加, QSpinBoxDelegate 可以设置最小值和最大值, QDoubleSpinBoxDelegate 可以设置最小值, 最大值和小数位数.