2017-06-01 29 views
0

默認情況下選擇第一行,當我移動選擇最後一行時,我希望所有的行將被選中但不是,它只選擇QTableView的可見行爲什麼QTableView擴展選擇忽略我的默認選定行?

我有一個QTableView顯示來自數據庫模型的數據。它被配置爲允許擴展選擇(ctrl,shift等)和僅選擇行(不是單元格)。內容正在改變基於其他參數,每當我更新模型,我默認選擇我的QTableView的第一行。

ui->tableView->setModel(model); 

ui->tableView->setColumnHidden(UidColumn, true); 

ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); 
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); 
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); 

ui->tableView->verticalHeader()->hide(); 
ui->tableView->setAlternatingRowColors(true); 

// This is done whenever the content changes 
QModelIndex index = model->index(0,0); 
ui->tableView->setCurrentIndex(index); 

我隱藏垂直標題,因爲沒有顯示在那裏,我隱藏第一列,因爲它與用戶無關。

第一行顯示爲選中,我甚至記錄了焦點的變化,並且tableView->selectionModel()->selectedRows()總是好的(即返回QModelIndex(0,0))。但是當我按住shift鍵並點擊最後一行時,就好像第一行從未被選中。

如果我手動選擇第一行(或任何一行),下一次移位點擊將完美工作。如果我按住ctrl鍵,多重選擇就可以完美運行。這就像我的默認選擇(通過代碼完成)在按住shift鍵的情況下被忽略。

回答

0

默認QModelIndex(0,0)選擇隱藏列的一部分的單元格。即使作爲選定的行顯示,顯然它會弄亂選擇。

如果我不隱藏第一列,它工作正常。

如果我使用QModelIndex index = model->index(0,1);它工作正常。

一個簡單的辦法是做ui->tableView->selectRow(0);