数据未更改时触发的QStandardItemModel上的itemChanged()

时间:2018-01-25 19:16:24

标签: qt qt4.8 qstandarditemmodel

我有以下连接线:

connect(my_QStandardItemModel ,SIGNAL(itemChanged(QStandardItem*)),
    this,SLOT(cellEditEndedCalled(QStandardItem*)));

出于某种原因,每当我在表格内的单元格上进入编辑模式(双击)并单击另一个单元格时,即使我没有对我的数据进行任何更改,也会调用cellEditEndedCalled()。 / p>

关于为什么会发生这种情况的任何想法?

编辑: 尝试使用dataChanged(...)代替itemChanged(...),但仍在调用广告位。

my_QStandardItemModel的实现:

class my_QStandardItemModel :public QStandardItemModel
{
    typedef QStandardItemModel baseClass;
    Q_OBJECT

public:
    my_QStandardItemModel ();
    virtual ~my_QStandardItemModel ();

...

之后不会覆盖任何信号。

1 个答案:

答案 0 :(得分:0)

因为信号itemChanged不适合您的情况。 QStandardItemModel继承了另一种单一形式QAbstractItemModel

    void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const 
QModelIndex &bottomRight, const QVector<int> &roles = QVector<int> ())

发出有关发生更改的索引的QModelIndex信息:您的单元格。

您需要将该信号连接到您的插槽(要进行修改以匹配新的信号签名)。

为什么即使您没有修改数据也会发出itemChanged信号:因为当您更改项目 NOT 时,该信号会发出。