void ShowLogDialog::showLogs(const QList<Log> &logs) {
ModelBuilder::buildModel(&(this->model), logs);
ui->tableView->setModel(this->model);
ui->tableView->resizeColumnsToContents();
connect(ui->tableView->selectionModel(),
SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(showOperationDetails(const QModelIndex &, const QModelIndex &)));
}
當前行改變時, QTableView并不提供信號, 而是他的SelectionModel發出信號. 這個連接只有在setModel()后才有用, 當model改變后, 這個連接也會失去作用, 而要再新的model設置后再調用一次.
在buildModel()時, 傳入的model會被刪除, 然后再為其創建一個新的model, 這時, 與tableView相關連的model被刪除了, 所以他的SelectionModel也被刪除, 與這個SelectionModel相關的連接也被自動刪除, 所以在setModel()后, tableView會有一個新的SelectionModel, 也要對其進行新的信號糟連接.
void ShowLogDialog::showOperationDetails(const QModelIndex & current,
const QModelIndex & previous) {
// 取得當前行的第四列的值: 操作詳細信息, 然后顯示到右邊的QTextEdit中.
QModelIndex index = ui->tableView->model()->index(current.row(), 3);
ui->textEdit->setText(index.data().toString());
}