[QTableWidgetItem文本()编辑期间的属性

问题描述 投票:0回答:1

我在QTableWidget或QTableWidgetItem中遇到以下问题:我想在单元格的编辑/键入过程中对其进行分析,例如作为对KeyReleaseEvent的反应。

但是QTableWidgetItem :: text()属性仅在单元格编辑完成(焦点已离开单元格)。

如何克服这种行为?当然,可以分析KeyReleaseEvent中的按钮按钮,但是使用text()属性,会容易得多...

c++ qt qtablewidget qtablewidgetitem
1个回答
1
投票

一种可能的解决方案是通过委托创建一个自定义QLineEdit作为编辑器:

#include <QtWidgets>

class LineEdit: public QLineEdit{
public:
    using QLineEdit::QLineEdit;
protected:
    void keyReleaseEvent(QKeyEvent *event) {
        QLineEdit::keyPressEvent(event);
        qDebug() << text();
    }
};

class StyledItemDelegate: public QStyledItemDelegate{
public:
    using QStyledItemDelegate::QStyledItemDelegate;
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const{
        LineEdit *editor = new LineEdit(parent);
        return editor;
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTableWidget w(10, 10);
    w.setItemDelegate(new StyledItemDelegate(&w));
    w.show();
    return a.exec();
}
© www.soinside.com 2019 - 2024. All rights reserved.