【发布时间】:2016-01-27 23:19:53
【问题描述】:
在我的 QListWidget 子类中,当我使用 setSelectionModel 替换其 QItemSelectionModel 时,列表小部件停止发出其 itemSelectionChanged 信号。在实际代码中,我这样做是为了安装 QItemSelectionModel 的子类,但即使我只使用新的 QItemSelectionModel 也会出现问题。
MyListWidget::MyListWidget(QWidget* parent)
: QListWidget(parent)
{
QItemSelectionModel* oldSelectionModel = selectionModel();
QItemSelectionModel* newSelectionModel = new QItemSelectionModel(model(), oldSelectionModel->parent());
setSelectionModel(newSelectionModel);
oldSelectionModel->deleteLater();
}
在调试器中,我可以看到 QItemSelectionModel 发出其 selectionChanged 信号,但 QListWidget 从未发出其对应的 itemSelectionChanged 信号。
如果我注释掉这个构造函数的主体,一切正常。和以前一样,我可以看到 QItemSelectionModel 发出其 selectionChanged 信号,但现在触发 QListWidget 发出 itemSelectionChanged。
看起来我对 setSelectionModel 的调用导致 QItemSelectionModel::selectionChanged 和 QListWidget::itemSelectionChanged 之间的连接中断。
顺便说一句,我检查了我是否将错误的参数传递给我的新 QItemSelectionModel。在我创建它之后,newSelectionModel 的 model() 和 parent() 与 oldSelectionModel 的相同。我还尝试注释掉对 deleteLater 的调用,但这没有帮助。
非常感谢任何帮助。
【问题讨论】: