【问题标题】:Selecting items in a QTreeView with keyboard arrows使用键盘箭头在 QTreeView 中选择项目
【发布时间】:2014-04-11 15:49:02
【问题描述】:

我正在尝试使用箭头键在 QTreeView 中选择一个项目,但找不到属于此类的返回突出显示项目索引的方法。 到目前为止,我只能通过单击鼠标来选择项目:

connect(m_QTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(ItemTreeClicked(QModelIndex)));

但如果我尝试使用键盘箭头更改焦点,则当前索引不会更新。 老实说,即使我的“鼠标单击”版本也不完美,因为我使用了一个初始化为 false 并在我进入插槽 ItemTreeClicked 时传递为 true 的布尔值。我必须这样做,因为当我尝试从列表中删除一个项目时,如果我还没有点击任何内容,我的应用程序就会崩溃。

我在 QtCreator 4.7.4 上使用 c++ 进行编码

任何帮助或示例代码将不胜感激。

干杯。

【问题讨论】:

  • 您可以在QTreeView::selectionChanged()虚函数中处理选择变化,或者使用树视图选择模型的QItemSelectionModel::selectionChanged()信号。
  • 至少在 Qt5 中这是默认行为。箭头键向上/向下移动和进/出树。当然只有在你可以使用 Qt5 时才有用。

标签: c++ qt qtreeview


【解决方案1】:

也许您可以继承 QTreeView 并覆盖 keyPressEvent 方法,以便更改 current index

myqtreeview::keyPressEvent(QKeyEvent* event){

    QModelIndex qmi = this->currentIndex();

    if(event->key() == Qt::Key_Down){
        this->setCurrentIndex(QAbstractItemModel::createIndex(qmi->row()+1, qmi->column()));
    }else{
        ...
    }
    QTreeView::keyPressEvent(event);
}

注意:这只是一个想法,我目前无法测试,所以如果你想尝试一下,你可能需要稍微调整一下

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多