Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用键盘箭头在QTreeView中选择项目_C++_Qt_Qtreeview - Fatal编程技术网

C++ 使用键盘箭头在QTreeView中选择项目

C++ 使用键盘箭头在QTreeView中选择项目,c++,qt,qtreeview,C++,Qt,Qtreeview,我试图用箭头键在我的QTreeView中选择一个项目,但找不到属于此类的方法,该类返回突出显示项目的索引。 到目前为止,我只能通过单击鼠标来选择项目: connect(m_QTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(ItemTreeClicked(QModelIndex))); 但是,如果我尝试用键盘箭头更改焦点,则当前索引不会更新。 老实说,即使是我的“鼠标点击”版本也不是完美的,因为我使用了一个布尔值,当我进入插槽ItemTree

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

connect(m_QTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(ItemTreeClicked(QModelIndex)));
但是,如果我尝试用键盘箭头更改焦点,则当前索引不会更新。 老实说,即使是我的“鼠标点击”版本也不是完美的,因为我使用了一个布尔值,当我进入插槽ItemTreeClicked时,它被初始化为false并传递为true。我不得不这么做,因为当我试图从列表中删除一个项目时,如果我还没有点击任何东西,我的应用程序就会崩溃

我在C++中对qtC造饰者4.7.4/p>进行编码 任何帮助或示例代码都将不胜感激


干杯。

也许您可以将
QTreeView
子类化,并覆盖
keyPressEvent
方法,使其更改


注意:这只是一个想法,我目前无法测试它,因此如果您想尝试它,可能需要对其进行一些调整

您可以在
QTreeView::selectionChanged()
virtual function中处理选择更改,或者使用
QItemSelectionModel::selectionChanged())
树视图选择模型的信号。至少在Qt5中,这是默认行为。箭头键在树中向上/向下和向内/向外移动。当然,只有在可以使用Qt5时才有用。
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);
}