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 &)));
}
當(dāng)前行改變時, QTableView并不提供信號, 而是他的SelectionModel發(fā)出信號. 這個連接只有在setModel()后才有用, 當(dāng)model改變后, 這個連接也會失去作用, 而要再新的model設(shè)置后再調(diào)用一次.
在buildModel()時, 傳入的model會被刪除, 然后再為其創(chuàng)建一個新的model, 這時, 與tableView相關(guān)連的model被刪除了, 所以他的SelectionModel也被刪除, 與這個SelectionModel相關(guān)的連接也被自動刪除, 所以在setModel()后, tableView會有一個新的SelectionModel, 也要對其進(jìn)行新的信號糟連接.
void ShowLogDialog::showOperationDetails(const QModelIndex & current,
const QModelIndex & previous) {
// 取得當(dāng)前行的第四列的值: 操作詳細(xì)信息, 然后顯示到右邊的QTextEdit中.
QModelIndex index = ui->tableView->model()->index(current.row(), 3);
ui->textEdit->setText(index.data().toString());
}