QListView选择因键盘活动而发生变化时发出信号?

x-x*_*x-x 15 c++ qt qlistview qt5

我有一个QTialog,用QT Designer创建,看起来像这样: 对话

左侧的服务器列表是带有QStringListModel的QListView.通过将视图的激活(QModelIndex)信号连接到对话框中的插槽功能,鼠标单击列表视图中的项目将使用所选项目的信息更新表单.

但是,向上或向下按键盘也会更改所选项目,但不会发出任何信号,因此表单不会更新以匹配所选项目.怎么解决这个问题?

cgm*_*gmb 27

activated(QModelIndex)信号实际上指的是一些比选的公正的办事了.这个概念相当含糊,但它更像是一种明确的选择行为.如果您只是在寻找当前选择已更改的通知,则可以获取选择模型并连接到其更新.

MyView::MyView() {
   QListView* view = new QListView(this);
   connect(view->selectionModel(), 
      SIGNAL(selectionChanged(QItemSelection,QItemSelection)), 
      this, SLOT(handleSelectionChanged(QItemSelection)));
}

...

MyView::handleSelectionChanged(const QItemSelection& selection){
   if(selection.indexes().isEmpty()) {
      clearMyView();
   } else {
      displayModelIndexInMyView(selection.indexes().first());
   }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,displayModelIndexInMyView(QModelIndex)应该替换为当前的处理程序插槽activated(QModelIndex),并clearMyView()替换为在没有选择任何内容时要执行的操作.

有很多方法可以做到这一点,老实说,我不确定什么是规范的,但我认为这对你有用.