【问题标题】:How to configure QTreeView to preserve multiple selection when moving using the arrow keys如何配置 QTreeView 以在使用箭头键移动时保留多项选择
【发布时间】:2012-01-19 21:05:40
【问题描述】:

我使用 QTreeView 并将 selectionMode 设置为 ExtendedSelection。我想更改每次使用箭头键更改当前项目(焦点)时清除所选项目的默认行为。

是否可以设置它,以便当我使用箭头键导航时,选择保留并且只有当前项目(焦点)更改(与使用时的工作方式相同Ctrl+箭头)。我基本上需要交换(Arrow vs. Ctrl+Arrow)的行为,或者只是我们 Ctrl+Arrow-like 行为,即使没有按下 Ctrl。

这可能吗?

谢谢, FipS

【问题讨论】:

    标签: c++ qt user-interface


    【解决方案1】:

    这是一个很好的问题,因为您需要使用的功能有点晦涩难懂。您将不得不继承 QTreeView 并覆盖 keyPressEvent() 函数。这应该让你走上正轨:

    class MyTree : public QTreeWidget
    {
        Q_OBJECT
    
        protected:
    
            void keyPressEvent( QKeyEvent *event )
            {   
                if( event->key() == Qt::Key_Up )
                {   
                    selectionModel()->setCurrentIndex( indexAbove(currentIndex()), QItemSelectionModel::NoUpdate );
                }   
                else if( event->key() == Qt::Key_Down )
                {   
                    selectionModel()->setCurrentIndex( indexBelow(currentIndex()), QItemSelectionModel::NoUpdate );
                }   
                else
                {   
                    QTreeWidget::keyPressEvent( event );
                }   
            }   
    };
    

    【讨论】:

    • 嗨,克里斯,这正是我想要的!我需要修复 PageUp、PageDown 和鼠标单击等其余控件以模仿完整的 Ctrl 行为。但是您的代码非常适合箭头键!再次感谢 FipS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    相关资源
    最近更新 更多