Qt: QTableView的當前行改變時的信號Qt: QTableView的當前行改變時的信號

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());

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章