Qt 笔记(1) 为QTableWidget设置自定义代理

参考Qt 例程"Spin Box Delegate Example", 自己实现了 QSpinBoxDelegate, QDoubleSpinBoxDelegate, QComboBoxDelegate 和 QDateEditDelegate四个类, 分别用于为QTableWidget 的单元格添加QSpinBox, QDoubleSpinBox, QComboBox 和 QDateEdit代理. 效果如下图所示:

Qt 笔记(1) 为QTableWidget设置自定义代理_第1张图片

Qt 笔记(1) 为QTableWidget设置自定义代理_第2张图片

Qt 笔记(1) 为QTableWidget设置自定义代理_第3张图片

Qt 笔记(1) 为QTableWidget设置自定义代理_第4张图片

关于这几个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 可以设置最小值, 最大值和小数位数. 

 

 

 
 
 
 

你可能感兴趣的:(Qt,QTableWidget,自定义代理)