先前递归添加的QCheckBox(es)上的qt信号插槽
我在特定函数的tableWidget单元格(始终在第1列)中递归添加一些复选框。这些复选框的最终数量未定义,取决于用户输入先前递归添加的QCheckBox(es)上的qt信号插槽,qt,checkbox,signals-slots,qcheckbox,Qt,Checkbox,Signals Slots,Qcheckbox,我在特定函数的tableWidget单元格(始终在第1列)中递归添加一些复选框。这些复选框的最终数量未定义,取决于用户输入 QStringList matID; for(int i=0; i<matID.size(); i++ { ui->tableWidget->insertRow( ui->tableWidget->rowCount() ); QCheckBox *checkBox = new QCheckBox(); ui->tabl
QStringList matID;
for(int i=0; i<matID.size(); i++
{
ui->tableWidget->insertRow( ui->tableWidget->rowCount() );
QCheckBox *checkBox = new QCheckBox();
ui->tableWidget->setItem(ui->tableWidget->rowCount()-1,0,checkBox)
}
QStringList-matID;
对于(inti=0;itableWidget->insertRow(ui->tableWidget->rowCount());
QCheckBox*复选框=新的QCheckBox();
ui->tableWidget->setItem(ui->tableWidget->rowCount()-1,0,复选框)
}
我想用一个信号插槽连接它们中的每一个,它告诉我哪一个已经被检查过
有人能帮我吗?我真的不知道怎么做
谢谢
朱塞佩这个问题有四种解决方案。我只描述最干净的可能性 最好的解决方案是实际使您的项目可检查。您可以通过使用
setFlags()
在项目上设置Qt::ItemIsUserCheckable
标志来实现这一点,记住也要保留默认值
QStringList matID;
for(int i=0; i<matID.size(); i++
{
ui->tableWidget->insertRow( ui->tableWidget->rowCount() );
QTableWidgetItem *item = ui->tableWidget->getItem(ui->tableWidget->rowCount()-1,0);
item->setFlags(item->getFlags() | Qt::ItemIsUserCheckable);
}
QStringList-matID;
对于(inti=0;itableWidget->insertRow(ui->tableWidget->rowCount());
QTableWidgetItem*item=ui->tableWidget->getItem(ui->tableWidget->rowCount()-1,0);
item->setFlags(item->getFlags()| Qt::ItemIsUserCheckable);
}
然后,如中所述(ItemWidgets非常类似),您可以监听itemChanged
并使用checkState()
进行检查
其他方法将是:
- 为列设置委托
- 创建一个
以将自己的QSignalMapper
指针映射到标识行的某个值QCheckBox
- 使用
member函数找出哪个复选框负责,并自行将其解析回行QObject::sender()
connect(复选框,&QCheckBox::stateChanged,[=](int state){qDebug(),谢谢,但就像你说的,我不能说哪一个被选中了:我总是得到2或0,无论哪个复选框被选中。我最好解释一下:我想发出一个信号,给我I的值(单击复选框所在的行号)您调用getCurrentRow,但这可能会失败,因为您插入了QCheckBox。因此,您需要采取变通办法