需求:透過槽函數程式化控制 QTableWidget 的游標位置,將指定單元格設為選中/當前狀態。
選中第一個儲存格(第 0 行、第 0 列):
ui.tableWidget->setItemSelected(ui.tableWidget->item(0, 0), true);
// 設定第 row 行、col 列為當前編輯/焦點儲存格
ui.tableWidget->setCurrentCell(row, col);
// 或
ui.tableWidget->setCurrentItem(ui.tableWidget->item(row, col));
// 選中單一儲存格
ui.tableWidget->item(row, col)->setSelected(true);
// 範圍選中(需啟用選中模式)
ui.tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui.tableWidget->setRangeSelected(QTableWidgetSelectionRange(topRow, leftCol, bottomRow, rightCol), true);
// 確保目標儲存格在視野內
ui.tableWidget->scrollToItem(ui.tableWidget->item(row, col), QAbstractItemView::PositionAtCenter);
item(row, col) 若返回 nullptr(儲存格未初始化),需先 setItem(row, col, new QTableWidgetItem())setSelected)與當前儲存格(setCurrentCell)是獨立屬性,通常需同時設定setupUi 之後)void MyWidget::onJumpToCell(int row, int col) {
if (row >= 0 && row < ui.tableWidget->rowCount() &&
col >= 0 && col < ui.tableWidget->columnCount()) {
QTableWidgetItem *target = ui.tableWidget->item(row, col);
if (!target) {
target = new QTableWidgetItem();
ui.tableWidget->setItem(row, col, target);
}
ui.tableWidget->setCurrentCell(row, col);
target->setSelected(true);
ui.tableWidget->scrollToItem(target);
}
}
核心原則:先確保 Item 存在,再用 setCurrentCell 定位游標,setSelected 標記選中,scrollToItem 保證可見。