首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何捕获QTableWidget的编辑单元格的按键事件?

如何捕获QTableWidget的编辑单元格的按键事件?
EN

Stack Overflow用户
提问于 2020-12-10 17:54:06
回答 1查看 66关注 0票数 0

这里有两个关于捕获QTableWidget按键事件的答案。How to create a SIGNAL for QTableWidget from keyboard?

按照上面的方法,我可以“钩住”按键事件,当我按空格键时,背景颜色变为红色。

但是,它只适用于选定的单元格,而不适用于正在编辑的单元格。

当它处于编辑状态时,这两种方法都会失败。我可以自由地输入空格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-24 03:44:43

当它处于“编辑状态”时,在QTableWidget (项目委托)上面有一个编辑器小部件,它接收关键事件,因为它在上面,所以你看不到它后面的单元格内容和单元格背景。但是您可以通过将QAbstractItemDelegate设置为QTableWidget来访问和“挂钩”此事件。

代码语言:javascript
运行
复制
// 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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65232193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档