我正在Qt开发一个项目。我有一个QTreeWidget(filesTreeWidget),带有一些文件名和一个用于创建文件的按钮。 “创建”按钮向filesTreeWidget添加一个新项目(项目的文本为“”),编辑该项目以选择名称。当我按ENTER键时,文件名通过套接字发送到服务器。当我按ESC键时出现问题,因为文件名仍然是“”并且没有发送到服务器。我试图覆盖keyPressEvent但是没有用。有任何想法吗?我在编辑项目时需要赶上ESC新闻事件。
答案 0 :(得分: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
}
}
可能有更优雅的方式来实现你想要的,但这应该很容易。例如,如果你真的不想要子类,你可以安装一个事件过滤器,但我不喜欢这样做,特别是对于包含大量事件的“大”类,因为它相对昂贵。
答案 1 :(得分:3)
实施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
}