我正在使用QTableWidget
,我只用文字填充它。如果我选择一个单元格并按一个键,则选择将更改为以按下的键作为其起始字母的单元格。如何禁用此行为?
答案 0 :(得分:3)
您需要定义自己的继承QTableWidget类的TableWidget类,并使用空实现覆盖虚拟keyboardSearch()函数。这将禁用键盘搜索功能。
class MyTableWidget : public QTableWidget
{
...
public:
virtual void keyboardSearch(const QString& search) {};
...
};
答案 1 :(得分:0)
已接受的解决方案具有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() );
}
这甚至可以在不继承的情况下通过安装类似的事件过滤器来实现。