这里有两个关于捕获QTableWidget按键事件的答案。How to create a SIGNAL for QTableWidget from keyboard?
按照上面的方法,我可以“钩住”按键事件,当我按空格键时,背景颜色变为红色。
但是,它只适用于选定的单元格,而不适用于正在编辑的单元格。
当它处于编辑状态时,这两种方法都会失败。我可以自由地输入空格。
发布于 2020-12-24 03:44:43
当它处于“编辑状态”时,在QTableWidget
(项目委托)上面有一个编辑器小部件,它接收关键事件,因为它在上面,所以你看不到它后面的单元格内容和单元格背景。但是您可以通过将QAbstractItemDelegate
设置为QTableWidget
来访问和“挂钩”此事件。
// itemdelegate.h
class ItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ItemDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent)
{
}
bool eventFilter(QObject *object, QEvent *event) override
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Space) {
qDebug() << "space pressed";
}
}
return false;
}
};
// main.cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget* widget = new QTableWidget();
widget->setColumnCount(2);
widget->setRowCount(2);
widget->setItemDelegate(new ItemDelegate(widget));
widget->show();
return a.exec();
}
https://stackoverflow.com/questions/65232193
复制相似问题