我正在使用一个QTableWidget
我用纯文本项目填充它。如果我选择一个单元格并按下一个键,则选择更改为一个以按下的键作为其起始字母的单元格。如何禁用此行为?
问问题
1226 次
2 回答
3
您需要定义自己的 TableWidget 类继承 QTableWidget 类并使用空实现覆盖虚拟键盘搜索()函数。这将禁用键盘搜索功能。
class MyTableWidget : public QTableWidget
{
...
public:
virtual void keyboardSearch(const QString& search) {};
...
};
于 2012-12-21T02:51:42.233 回答
1
公认的解决方案存在问题,即 QAbstractItemView 派生类型(QTableWidget)仍然会接受并因此窃取各种关键事件。例如,如果您想在q
按下键时关闭父窗口小部件,则不会获得q
按键事件。
查看源代码QAbstractItemView::keyPressEvent
,键盘搜索仅在事件文本非空时触发。所以,我发现它是一个更好的解决方案来覆盖keyPressEvent
,在事件中清除此文本,然后调用基类实现:
class MyTable :
public QTableView
{
public:
void
keyPressEvent( QKeyEvent* event ) override
{
/* Clear text in order to avoid keyboardSearch being triggered */
QKeyEvent textClearedEvent( event->type(),
event->key(),
event->modifiers(),
event->nativeScanCode(),
event->nativeVirtualKey(),
event->nativeModifiers(),
QString(),
event->isAutoRepeat(),
event->count() );
QTableView::keyPressEvent( &textClearedEvent );
event->setAccepted( textClearedEvent.isAccepted() );
}
通过安装类似的事件过滤器,这甚至可以在不继承的情况下工作。
于 2020-08-27T11:13:32.613 回答