我有一个QTialog,使用QT Designer创建,看起来像这样:
左侧的服务器列表是带有QStringListModel的QListView。鼠标单击列表视图中的项目,通过将视图的激活(QModelIndex)信号连接到对话框中的插槽函数,使用所选项目的信息更新表单。
但是,向上或向下按键盘也会更改所选项目,但不会发出任何信号,因此表格不会更新以匹配所选项目。如何解决这个问题?
答案 0 :(得分:23)
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()
替换为当您没有选择任何内容时要执行的操作。< / p>
有很多方法可以做到这一点,老实说,我不确定什么是规范的,但我认为这对你有用。
答案 1 :(得分:0)
另一种方法是实现QListView::currentChanged(...)
虚函数。