2017-10-18 91 views
0

我在tableWidget单元格(总是在第1列)中递归地添加了一些checkBox。这些复选框的最终数量未定义,取决于用户输入。先前添加QCheckBox(es)上的qt signal-slot递归添加

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) 
} 

我想连接它们中的每一个与信号插槽连接,告诉我哪一个已被检查。

任何人都可以帮助我吗?我真的不明白怎么做了......

感谢 朱塞佩

+1

简单地把for循环添加:'连接(复选框,&QCheckBox :: stateChanged,[=](INT状态){qDebug()<< “复选框点击” <<状态;});' – user3606329

+0

谢谢,但是像你说的我不能说哪一个被检查过:我总是得到2或者0,无论哪个复选框被点击 – piepolitb

+0

我最好解释一下我自己:我想发出一个信号,它给了我i的值行号,点击复选框) – piepolitb

回答

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); 
} 

然后,在Qt/C++: Signal for when a QListWidgetItem is checked?解释(ItemWidgets足够相似),然后你可以监听itemChanged并检查使用checkState()

其他方法是:

  • 为您的列

  • 的委托创建QSignalMapper到自己QCheckBox指针映射到某个值,它标识您的行

  • 使用QObject::sender()成员函数来确定哪个复选框是负责的,并将其自行解析回行。