在EnhTableWidget的字段更改值(返回之前)时发出信号

时间:2016-01-12 09:33:48

标签: c++ qt widget signals-slots

我有一个关于EnhTableWidget字段信号的问题:

  • 当我点击该表的单元格时 - > .. currentCellChanged(int,int,int,int)被发出

  • 当我在表格的单元格中点击返回时 - > 发出 cellChanged(int,int)

当一个单元格的值发生变化时,我需要启动一个计算方法,但是返回之前是。有一个信号,比如

当我更改该表的字段值(尚未返回!)时 - >发出 ??

2 个答案:

答案 0 :(得分:1)

发出itemChanged信号

void QTableWidget::itemChanged(QTableWidgetItem * item)

此外,您可以尝试捕获dataChanged信号,该信号继承自QAbstractItemView类

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

或者您可以继承QTableWidget并重新实现keyPressEvent或使用event filter使用自定义keyPressHandler,如果您不想继承子类:

tableWidget->installEventFilter(keyPressHandler);

答案 1 :(得分:1)

创建一个自定义委托,处理单元格编辑器发出的更改:

MyDelegate::MyDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}

QWidget* MyDelegate::createEditor(QWidget* parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
{
    // Assume you want a QLineEdit editor for the QTableWidget cell
    QLineEdit* editor = new QLineEdit(parent);

    // Get notified when editor changes
    QObject::connect(editor, &QLineEdit::textEdited, this, [=](const QString &newValue) {
        qDebug() << "Cell has changed without pressing return: " << newValue;
    }

    return editor;
}