gpt4 book ai didi

c++ - 什么时候会在 QTableWidget 中触发 cellChanged 信号?

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:26 28 4
gpt4 key购买 nike

我正在使用 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 时,我无法捕捉到这个信号。什么时候会触发这个信号?或者我可以使用另一个信号或以其他方式做到这一点吗?谢谢!

最佳答案

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

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

也可能:您可以将使用过的委托(delegate)子类化,并使其使用您的验证器创建 QLineEdit 对象。这将是最干净的方法,因为您不会干扰模型/ View 架构并且可以依赖表对象发送的信号。

最好的问候

关于c++ - 什么时候会在 QTableWidget 中触发 cellChanged 信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892420/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com