我正在使用Qt开发一个项目。我有一个QTreeWidget(filesTreeWidget),其中包含一些文件名和一个用于创建文件的按钮。单击“Create”按钮会向filesTreeWidget添加一个新项(该项的文本为“”),并可编辑以选择名称。当我按下ENTER键时,文件名通过套接字发送到服务器。问题是当我按下ESC键时,文件名仍然为空,并且未被发送到服务器。我尝试重写keyPressEvent,但不起作用。有什么想法吗?我需要在编辑项时捕获ESC按键事件。
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
}
}
实现你想要的功能可能有更加优雅的方式,但是这种方法应该会比较简单。例如,如果你真的不想使用子类,你可以安装一个事件过滤器,但我不喜欢在具有大量事件的“大”类中执行此操作,因为它相对比较昂贵。
请按照以下方式实现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
}