编辑QTreeWidgetItem时捕获ESC键按下事件

Joh*_*ith 3 c++ networking qt key event-handling

我正在Qt开发一个项目.我有一个QTreeWidget(filesTreeWidget),带有一些文件名和一个用于创建文件的按钮."创建"按钮向filesTreeWidget添加一个新项目(项目的文本为""),编辑该项目以选择名称.当我按ENTER键时,文件名通过套接字发送到服务器.当我按ESC键时出现问题,因为文件名仍然是""并且没有发送到服务器.我试图覆盖keyPressEvent但是没有用.有任何想法吗?我在编辑项目时需要捕捉ESC新闻事件.

Ant*_*ony 7

您可以继承QTreeWidget,并重新实现,QTreeView::keyPressEvent如下所示:

void MyTreeWidget::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Escape)
    {
        // handle the key press, perhaps giving the item text a default value
        event->accept();
    }
    else
    {
        QTreeView::keyPressEvent(event); // call the default implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

可能有更优雅的方式来实现你想要的,但这应该很容易.例如,如果你真的不想要子类,你可以安装一个事件过滤器,但我不喜欢这样做,特别是对于包含大量事件的"大"类,因为它相对昂贵.

  • 我在询问之前进行了此操作,但是当我按ESC键时,不会调用keyPressEvent()方法,就像没有按键事件一样。 (2认同)