我正在使用QTableWidget来显示和编辑数据矩阵。出于验证目的,我将QLineEdit用作此表中的项目。如下,
pTable=new QTableWidget(N,N,this);
pItem=new QLineEdit();
pItem->setText(tr("%1").arg(pInfra->adjacencyM(i,j)));
rx=new QRegExp("0|1");
validatorRegexp=new QRegExpValidator(*rx,0);
pItem->setValidator(validatorRegexp);
pTable->setCellWidget(i,j,pItem);
因为我想知道某个单元格中的数据是否已被更改,所以我尝试了cellChanged(int,int)信号,并将其与我自己的插槽cellEdited(int,int)连接,就像这样
connect(pTable,SIGNAL(cellChanged(int,int)),this, SLOT(cellEdited(int,int)));
但是,当我在单元格中编辑QLineEdit时,我无法捕捉到这个信号。什么时候会发出这个信号?或者我可以使用其他信号或其他方式执行此操作吗? 谢谢!
答案 0 :(得分:0)
问题是cellChanged()
信号只有在表模型发出setData()
方法时才会发出,该方法通常来自代理的QLineEdit
。由于您通过设置单元格小部件拥有自己的机制,因此永远不会调用模型的setData()
方法。这意味着您必须连接到您在单元格中放置的textChanged()
对象的textEdited()
或QLineEdit
信号。
另一个有效选项是评论中beduin提到的方法。
也可以:您可以使用已使用的委托子类,并使用验证器创建QLineEdit
个对象。这是最干净的方法,因为您不会干扰模型/视图架构,并且可以依赖表对象发送的信号。
祝你好运 d
答案 1 :(得分:0)
不知道此问题的原因。考虑另一种方式。您可以捕获QLineEdit
信号textChanged
并使用QSignalMapper将每个QLineEdit
触发的信号绑定到特定的单元格编号。也许它不是最好的qway,但你可以使用它,以防这个问题无法解决。