4

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

4

2 回答 2

8

您可以继承 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
    }
}

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

于 2013-01-26T15:43:45.097 回答
4

实现keyPressEvent功能如下:

void TestTreeWidget::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
        case Qt::Key_Escape:
        {
            escapeKeyPressEventHandler(); 
            event->accept();
            break;
        }
        default:
            QTreeWidget::keyPressEvent(event);
    }
}

TestTreeWidget::escapeKeyPressEventHandler()
{
     // work with your QTreeWidgetItem here
}
于 2013-01-26T19:11:44.527 回答