一.前言
楼主在上一篇Qt笔记(五十一)之QTableWidget单元格显示控件讲述QTableWidget怎么添加控件,这个利用Qt的接口还是很简单的,用时也利用控件的信号,捕获了控件的操作,但是还存在一个问题,就是点击控件的时候,没有触发到cellClicked这个信号,这样就没法对指定的行列进行操作了,这样单元格的控件的意义就不大了。
二.解决方式
针对以上问题,有两个方式
1.设置控件大小,留出空间以便触发到cellClicked,这个方案对用户来说体验不好,直接pass
2.方式采用QModelIndex的方式,通过计算控件的区域大小从而获取控件的所在位置,Qt很人性化,给我们提供了对应的接口,不用我们手动去计算,具体使用如下
void TableWidgetControl::onBtnClicked()
{
qDebug()<< "按钮1点击";
qDebug()<<btn1->frameGeometry().x();
qDebug()<<btn1->frameGeometry().y();
QModelIndex modeIdx = ui->tableWidget->indexAt(QPoint(btn1->frameGeometry().x(),btn1->frameGeometry().y()));
qDebug()<<"按钮所在单元格:"<<modeIdx.row()<<":"<<modeIdx.column();
}
void TableWidgetControl::onBtn2Clicked()
{
qDebug()<< "按钮2点击";
qDebug()<<btn2->frameGeometry().x();
qDebug()<<btn2->frameGeometry().y();
QModelIndex modeIdx = ui->tableWidget->indexAt(QPoint(btn2->frameGeometry().x(),btn2->frameGeometry().y()));
qDebug()<<"按钮所在单元格:"<<modeIdx.row()<<":"<<modeIdx.column();
}