开发者

When will cellChanged signal be fired in QTableWidget?

开发者 https://www.devze.com 2023-03-03 15:08 出处:网络
I am using a QTableWidget to display and edit a data matrix. For validation purpose, I used the QLineEdit as items in this table. As following,

I am using a QTableWidget to display and edit a data matrix. For validation purpose, I used the QLineEdit as items in this table. As following,

        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);

Since I want to know if data in certain cell has been changed, so I tried cellChanged(int, int) signal, and connect it with my own slot cellEdited(int,int), like this

开发者_StackOverflow社区connect(pTable,SIGNAL(cellChanged(int,int)),this, SLOT(cellEdited(int,int)));

But, when I edit QLineEdit in the cell, I can not catch this signal. When will this signal be fired? Or can I do this using another signal or in some other way? Thanks!


The problem is that the cellChanged() signal is emittet only if the table model is issued the setData() method, which normally comes from the QLineEdit of the delegate. Since You have your own mechanism by setting the cell widget the setData() method of the model will never be called. Which means you'll have to connect to the textChanged() or the textEdited() signal of the QLineEdit object you put in the cells.

Another valid option is the approach mentioned by beduin in the comment.

Also possible: You could subclass the used delegate and make it create QLineEdit objects with your validator. Which would be the cleanest approach since you don't interfere with the model/view architecture and can rely on the signals the table object is sending.

Best regards D


Not aware about causes of this problem. Considering another ways. You can catch QLineEdit signal textChanged and use QSignalMapper to bind signal, fired by each QLineEdit to particular cell number. Maybe itsn't the best qway to do that, but you can use it in case this problem won't be solved.

0

精彩评论

暂无评论...
验证码 换一张
取 消