一个表格的进化史(四)

    题外话:

    文章原名叫《Qt如何使用表格》,感觉不够霸气,也看不出递进关系,于是就想了这个有逼格的名字。

     

    上一篇 我们给表格设置了样式表,表格一下子就美得上了一个档次,当然如果有美工做设计的话,那就美的不像话了。不过到目前为止美观性够了,但功能性还差很多。

    比如说我要修改表格中的性别字段的值,我可以在对应的单元格内直接进行编辑。但是有个问题,我们知道性别只有男女两个选项,我希望只能选择二者之一,而不能输入其他的内容,怎么办?

   我们可以使用setCellWidget,<void QTableWidget::setCellWidget(int row, int column, QWidget *widget)> 该函数可以在指定的单元格内放置QWidget,效果相当于用一个widget覆盖这个单元格比如需要实现上面的男女选项可以这么做:

    QComboBox* cbx = new QComboBox;
    cbx->addItem(QStringLiteral("男"));
    cbx->addItem(QStringLiteral("女"));
    ui->tableWidget->setCellWidget(0,3,cbx);

    QComboBox* cbx2 = new QComboBox;
    cbx2->addItem(QStringLiteral("男"));
    cbx2->addItem(QStringLiteral("女"));
    cbx2->setCurrentIndex(1);
    ui->tableWidget->setCellWidget(1,3,cbx2);

 blob.png

     我们创建了一个下拉框并添加了两个选项,然后调用table的setCellWidget就完成了。由于函数最后一个参数是QWidget*,这给了我们很大的自由度,相当于只要是个界面我们就可以放进去。我们可以对第二行的男女选项做个修改:

    QWidget* cellBg = new QWidget;
    QRadioButton* radio1 = new QRadioButton(QStringLiteral("男"));
    QRadioButton* radio2 = new QRadioButton(QStringLiteral("女"));
    QHBoxLayout* layout = new QHBoxLayout;
    layout->addWidget(radio1);
    layout->addWidget(radio2);
    cellBg->setLayout(layout);
    ui->tableWidget->setCellWidget(1,3,cellBg);
    
    cellBg->setStyleSheet("background:lightblue");

blob.png

    我们先创建了一个QWidget,然后在其之上放了两个单选按钮,最后再把QWidget设置到表格上去,相当于我们把自定义的一个界面放到表格中去了,所以只要你的脑洞够大就能想出很多种玩法。

    最后设置cellBg的背景颜色是因为,如果不设置颜色我们可以看到表格原本的内容。像这样:

blob.png


作者:fearlazy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fearlazy

打赏是不可能的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值