Qtablewidget里面嵌入多个radiobutton并判断其状态

今天有个人问我怎么做这个,我也没做过啊,然后看看需求,结合我所知道的一点点知识来解决。

   一、Qtablewidget类提供了丰富的接口,使用灵活度较高,但在批数据处理上不如tableview方便(仅个人观点啊,我Qt没学多久)。其中有个函数是setCellWidget()。下面是它的介绍。

void QTableWidget::setCellWidget(int row, int column, QWidget *widget)

Sets the given widget to be displayed in the cell in the given row and column, passing the ownership of the widget to the table.

If cell widget A is replaced with cell widget B, cell widget A will be deleted. For example, in the code snippet below, the QLineEdit object will be deleted.

可以将控件以QWidget的形式插入tabelwidget的item中。非常的好用(其实我也只是用过几次哈,没发现其他的办法,哈哈),在嵌入控件的时候。

二、嵌入多个radiobutton,这个嘛,就简单了嘛,一个布局轻松搞定。

三、判断状态,这个,哦,好像不能直接去操作哦。嗯,那就想办法获取它对应行列里面的radiobutton的对象。有个函数是

cellWidget,我先把某一行列的item通过这个函数送给QWidget里面,然后通过findchildren这个函数获取子对象,当前item里面的是widget,然后widget里面的就是radiobutton啦。
然后有了对象,还愁判断不了状态吗?OK,上代码。
QWidget *widget = ui->tableWidget->cellWidget(i,1);
        QList<QRadioButton*> rad = widget->findChildren<QRadioButton *>();
        for(int i = 0; i<rad.count();i++)
        {
            if(rad.at(i)->isChecked())
            {
                qDebug()<<rad.at(i)->objectName();
            }
        }

这样就可以随便操作这个item里面的子对象啦,我记得还有个更好的方法,不过忘记了,所以呀,好记性不如烂笔头,我就把它写下来,加深下印象,
不要时间一久就遗忘了。同事也希望能帮到别人。能力有限,目前只想到这个方法,广大的coder有其他方法欢迎交流,共同进步。
完整工程已上传。地址:http://download.csdn.net/download/bugcong/10149718



当使用 QTableWidget 添加多个下拉框和复选框时,可以使用 QTableWidgetItem 的 setFlags() 函数来设置每个单元格的编辑属性。然后,可以通过 QTableWidget 的 itemChanged 信号来获取状态的更改。 下面是一个示例代码: ```cpp #include <QApplication> #include <QTableWidget> #include <QComboBox> #include <QCheckBox> #include <QHeaderView> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建 QTableWidget QTableWidget tableWidget(3, 2); tableWidget.setHorizontalHeaderLabels({"下拉框", "复选框"}); // 设置表头自适应大小 tableWidget.horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 添加下拉框和复选框 for (int row = 0; row < tableWidget.rowCount(); ++row) { // 添加下拉框 QComboBox *comboBox = new QComboBox(); comboBox->addItem("选项1"); comboBox->addItem("选项2"); comboBox->addItem("选项3"); tableWidget.setCellWidget(row, 0, comboBox); // 添加复选框 QCheckBox *checkBox = new QCheckBox(); tableWidget.setCellWidget(row, 1, checkBox); } // 连接 itemChanged 信号 QObject::connect(&tableWidget, &QTableWidget::itemChanged, [&tableWidget](QTableWidgetItem *item) { // 获取状态的更改 int row = item->row(); int column = item->column(); if (column == 0) { // 下拉框状态变化 QComboBox *comboBox = qobject_cast<QComboBox*>(tableWidget.cellWidget(row, column)); QString selectedOption = comboBox->currentText(); qDebug() << "下拉框状态变化:" << selectedOption; } else if (column == 1) { // 复选框状态变化 QCheckBox *checkBox = qobject_cast<QCheckBox*>(tableWidget.cellWidget(row, column)); bool isChecked = checkBox->isChecked(); qDebug() << "复选框状态变化:" << isChecked; } }); tableWidget.show(); return a.exec(); } ``` 这段代码创建了一个包含3行2列的 QTableWidget,每个单元格分别添加了一个下拉框和一个复选框。通过连接 itemChanged 信号,可以获取下拉框和复选框的状态更改。当下拉框的选项变化时,会打印出当前选的选项;当复选框的状态变化时,会打印出复选框是否被选。 请注意,以上代码仅为演示目的,实际使用时可能需要根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值