【发布时间】:2016-08-02 20:00:47
【问题描述】:
现在我可以在函数eventFilter() 中处理我的QTableWidget 中的所有按键(在构造函数中调用myTable->viewport()->installEventFilter(this); 之后)。
唯一不起作用的地方是编辑时的可编辑单元格(因为它会抓取所有按键)。为了解决这个问题,我不能为表中的每个项目调用installEventFilter(),因为这些项目不是QObjects(而且我不能使用connect 来处理我的按键处理)。
我唯一的解决方案是将QLineEdits 放在这些单元格中,并使用事件过滤器在编辑时捕获按键。但是是否可以仅使用标准项目来解决它? (即只有 QTableWidgetItem 带有标志 Qt::ItemIsEditable)
我也可以为我的QTableWidget 打电话给grabKeyboard()。在这种情况下,我将按下所有按键(即使在用户编辑单元格时),但它会阻止编辑框(即用户无法输入任何内容)。在为表格调用grabKeyboard() 后是否可以修复损坏的编辑框?
【问题讨论】:
-
你能否实现另一个类,继承
QTableWidgetItem,以便拥有QTableWidgetItem的所有功能和你自己的功能来获得你想要的行为? -
是的,我可以实现另一个类,但我不明白在这种情况下如何覆盖按键处理。
-
“因为它会抓取所有按键”。不过,您确实获得了关键版本。想知道是什么在抓人。也许有充分的理由?
-
@S.Pinkus 梦想是默默地捕捉按键(即不破坏可编辑单元中的现有进程)。而关于
grabKeyboard()的那些话只是为了解释为什么我希望可以解决这个问题。
标签: c++ qt qtablewidget qtablewidgetitem