什么时候在QTableWidget中触发cellChanged信号?

时间:2011-05-05 03:41:54

标签: c++ qt

我正在使用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时,我无法捕捉到这个信号。什么时候会发出这个信号?或者我可以使用其他信号或其他方式执行此操作吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

问题是cellChanged()信号只有在表模型发出setData()方法时才会发出,该方法通常来自代理的QLineEdit。由于您通过设置单元格小部件拥有自己的机制,因此永远不会调用模型的setData()方法。这意味着您必须连接到您在单元格中放置的textChanged()对象的textEdited()QLineEdit信号。

另一个有效选项是评论中beduin提到的方法。

也可以:您可以使用已使用的委托子类,并使用验证器创建QLineEdit个对象。这是最干净的方法,因为您不会干扰模型/视图架构,并且可以依赖表对象发送的信号。

祝你好运 d

答案 1 :(得分:0)

不知道此问题的原因。考虑另一种方式。您可以捕获QLineEdit信号textChanged并使用QSignalMapper将每个QLineEdit触发的信号绑定到特定的单元格编号。也许它不是最好的qway,但你可以使用它,以防这个问题无法解决。