QTableWidgetItem text() 属性 编辑中
QTableWidgetItem text() property during editing
我在使用 QTableWidget 或 QTableWidgetItem 时遇到以下问题:
我想在 editing/typing 期间分析单元格中的文本,
例如作为对 KeyReleaseEvent 的反应。
但是 QTableWidgetItem::text() 属性 仅在
单元格编辑完成(焦点已离开单元格)。
我怎样才能克服这种行为?当然也可以分析
KeyReleaseEvent 中的按钮键,但使用 text() 属性 会容易得多...
一种可能的解决方案是通过委托建立自定义 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();
}
我在使用 QTableWidget 或 QTableWidgetItem 时遇到以下问题: 我想在 editing/typing 期间分析单元格中的文本, 例如作为对 KeyReleaseEvent 的反应。
但是 QTableWidgetItem::text() 属性 仅在 单元格编辑完成(焦点已离开单元格)。
我怎样才能克服这种行为?当然也可以分析 KeyReleaseEvent 中的按钮键,但使用 text() 属性 会容易得多...
一种可能的解决方案是通过委托建立自定义 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();
}