【问题标题】:QTreeWidgetItem Change - Detect Enter/ESCQTreeWidgetItem 更改 - 检测 Enter/ESC
【发布时间】:2015-03-05 16:33:57
【问题描述】:

我正在开发一个带有 QTreeWidgetItem 的 Qt/C++ 应用程序。创建新项目时,我将其设置为 setEditable,它允许我直接在 UI 中填写新名称。

我目前正在使用itemChanged 如下所示来捕获更改并保存它。默认情况下,我将新项目名称设置为新文件夹,之后我可以手动更改它。我的问题是,当我创建项目时,它变得可编辑,如果我按 EnterEsc 而不进行任何更改,则不会生成 itemChanged

我是否可以使用基于 SIGNAL/SLOT 的命令来捕获 Enter/Esc 事件。目标是触发相同的信号

connect(this, SIGNAL(itemChanged(QTreeWidgetItem*, int)),
        this, SLOT(onTreeItemChanged(QTreeWidgetItem*)));

我想将 Enter/Esc 信号连接到 onTreeItemChanged,就像对 itemChanged 所做的那样。

我尝试过使用itemActivated,但是即使按下Enter也不会触发。

connect(this, SIGNAL(itemActivated(QTreeWidgetItem*, int)),
        this, SLOT(onTreeItemChanged(QTreeWidgetItem*)));

任何想法,

赛博

【问题讨论】:

标签: c++ qt qtreewidget qtreewidgetitem


【解决方案1】:

很抱歉在回答中写了这个,但我仍然无法评论:

关于从 QCombobox 派生的类,我有一些(可能)类似的问题,它有一些特殊的行为,何时显示弹出窗口以及何时不显示。

每次按下 Return 时都会发生一些事情,但它不是 QEventKeyEvent,解决方案是捕获 QEvent::Shortcut,因为元素将此键解释为接受的快捷方式。

-- 编辑-- 在这种情况下,我经常安装一个事件过滤器,让它只将事件写入输出,使用 switch 语句过滤掉不感兴趣的元素,直到我找到罪魁祸首。

【讨论】:

  • 我能够看到 QEventKeyEvent。
  • 我没有看到一个简单的解决方案,也许您可​​以使用 currentIndex ()(继承自 QAbstractItemView)来获取项目索引并在自定义信号中使用它当 QAbstractItemDelegate * itemDelegate () 触发 closeEditor 时?这是一个猜测,但是当编辑器关闭时,代表应该触发这个信号(无论是返回/转义还是单击其他地方,也许你想在代表上使用过滤器来只获取密钥)。 currentItem 应该返回打开编辑器的 Item,您可以实现信号 my_itemChanged(QTreeWidgetItem*)。
  • 当使用 coorect 名称(不更改)创建项目时,编辑不会触发,(您可能会添加一个项目,但我想您只想在编辑代表关闭后采取行动。)
  • 是的,你是对的,但我可以设法将 itemChanged 更改为关闭的编辑器,在这种情况下它对我来说是一样的
  • 谢谢。我试图对 Keyevent 进行子类化,但问题是事件是在 QTreeWIdgetItem 处理输入的新值之前生成的。在那种情况下,我赶上事件但为时过早
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 2010-10-10
相关资源
最近更新 更多