我正在使用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) signal,并将它与我自己的插槽cellEdited(int,int)连接起来,如下所示
connect(pTable,SIGNAL(cellChanged(int,int)),this, SLOT(cellEdited(int,int)));
但是,当我在单元格中编辑QLineEdit时,我无法捕捉到这个信号。这个信号什么时候发射?或者,我可以使用另一个信号或其他方式来完成此操作吗?谢谢!
发布于 2011-05-06 03:48:21
不知道此问题的原因。考虑另一种方式。您可以捕获QLineEdit
信号textChanged
并使用QSignalMapper将每个QLineEdit
触发的信号绑定到特定的单元编号。也许这不是最好的方法,但你可以使用它,以防这个问题不能得到解决。
发布于 2011-05-05 15:07:55
问题是,只有在向表模型发出setData()
方法时,才会发出cellChanged()
信号,该方法通常来自委托的QLineEdit
。由于您通过设置单元小部件拥有自己的机制,因此永远不会调用模型的setData()
方法。这意味着您必须连接到放入单元格中的QLineEdit
对象的textChanged()
或textEdited()
信号。
另一个有效的选择是beduin在评论中提到的方法。
也可以:你可以子类化使用过的委托,让它用你的验证器创建QLineEdit
对象。这将是最干净的方法,因为您不会干扰模型/视图架构,并且可以依赖于表对象发送的信号。
最好的问候D
https://stackoverflow.com/questions/5892420
复制相似问题