首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候在QTableWidget中触发cellChanged信号?

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

Stack Overflow用户
提问于 2011-05-05 11:41:54
回答 2查看 4.8K关注 0票数 1

我正在使用QTableWidget来显示和编辑数据矩阵。出于验证目的,我将QLineEdit用作此表中的项。如下所示:

代码语言:javascript
运行
复制
        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)连接起来,如下所示

代码语言:javascript
运行
复制
connect(pTable,SIGNAL(cellChanged(int,int)),this, SLOT(cellEdited(int,int)));

但是,当我在单元格中编辑QLineEdit时,我无法捕捉到这个信号。这个信号什么时候发射?或者,我可以使用另一个信号或其他方式来完成此操作吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 03:48:21

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

票数 0
EN

Stack Overflow用户

发布于 2011-05-05 15:07:55

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

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

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

最好的问候D

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5892420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档