Can';t在Qt5中设置QModelIndex

Can';t在Qt5中设置QModelIndex,qt,model-view-controller,Qt,Model View Controller,下面是一个计时器例程,它在执行SQL查询后更新QTableView(partyView)的内容。If工作正常,但当我将程序从Qt4转换为Qt5时,它开始在最后一行给我分段错误: void MainWindow::on_timer() { QModelIndex idx=ui->partyView->currentIndex(); partyModel.setQuery(partyModel.q_main+partyModel.q_where); ui->

下面是一个计时器例程,它在执行SQL查询后更新
QTableView
partyView
)的内容。If工作正常,但当我将程序从Qt4转换为Qt5时,它开始在最后一行给我分段错误:

void MainWindow::on_timer()
{
    QModelIndex idx=ui->partyView->currentIndex();
    partyModel.setQuery(partyModel.q_main+partyModel.q_where);
    ui->partyView->setCurrentIndex(idx);
}
QModelIndex
中更改了什么,以及如何避免此错误?

关于代码

partyModel.setQuery(partyModel.q_main+partyModel.q_where);
这是否会更新附加了
ui->partyView
的基础模型?如果是这样,它很可能会使
ui->partyView->currentIndex()
返回的
QModelIndex
无效

试着改用


我不能说我知道从
Qt4
Qt5
的任何特定更改,但严格来说,
QModelIndex
是一个临时对象,可以通过对基础模型的任何更改而失效。我想你是幸运的(或者是不幸运的,取决于你的观点),因为
Qt4
@MichaelO。未定义的行为迟早会咬到你。
void MainWindow::on_timer ()
{
  QPersistentModelIndex idx = ui->partyView->currentIndex();
  partyModel.setQuery(partyModel.q_main + partyModel.q_where);
  if (idx.isValid()) {
    ui->partyView->setCurrentIndex(idx);
  } else {

    /*
     * idx is no longer a valid model index -- do something appropriate.
     */
  }
}