c++ - 当 QListView 选择因键盘事件而改变时发出信号?

标签 c++ qt qt5 qlistview

我有一个使用 QT Designer 创建的 QDialog,如下所示:Dialog

左边的服务器列表是一个带有 QStringListModel 的 QListView。通过将 View 的激活(QModelIndex)信号连接到对话框中的槽函数,鼠标单击 ListView 中的项目更新表单,并使用所选项目的信息。

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

最佳答案

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());
   }
}

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

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

关于c++ - 当 QListView 选择因键盘事件而改变时发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214550/

相关文章:

c++ - 使用 QObject::connect() 将函数连接到信号时,类型签名是否重要?

c++ - 了解 QGraphicsItem boundingRect 和 shape 方法之间的交互

c++ - 右键删除表格行的方法

具有相同布局的不同类型之间的C++转换

c++缓冲区溢出或损坏的变量

c++ - 托管 C++ 查找和替换语法

python - 如何从 Qt::namespase (Qt5, Python3.x) 导入?

c++ - 以 block 的形式读取(文本)文件

c++ - 错误 : type/value mismatch at argument 1 in template parameter list for 'template<class T> class QList'

c++ - 在 Qvector 中读取文件后存储数据