2013-07-22 75 views
1

我有一個QTableWidget,我已經設置了這樣一種方式,您不能選擇單元格,但可以通過標題選擇行/列。我遇到的問題是,當我選擇一行時,它會取消選擇任何已選擇的列,並且對列/行也是相同的。我希望能夠使用ExtendedSelection行爲和具有SingleSelection行爲的列選擇行,但彼此獨立。下面是我在做什麼:在QTableWidget中選擇行和列,同時保持突出顯示

ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 
connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int)), this,SLOT(horizontalHeaderClicked(int))); 
connect(ui->tableWidget->verticalHeader(),SIGNAL(sectionClicked(int)), this,SLOT(verticalHeaderClicked(int))); 

然後:

void MatrixWidget::horizontalHeaderClicked(int column){ 
    if(column <= 0) return; //first column is names, doesn't represent a segment 

    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns); 
    ui->tableWidget->selectColumn(column); 
    ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 

}

void MatrixWidget::verticalHeaderClicked(int row){ 
    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); 
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); 
    ui->tableWidget->selectRow(row); 
    ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 

}

回答

3

此代碼,您可以選擇列第一,那麼你必須按下控制選擇其他行。試試這個,我希望它能幫上忙。無論如何,這種解決方案不適用於輪班。

void SO_Qt::hhSelected(int index) 
{ 
    if(index <= 0) return; 
    ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); 
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns); 
    ui.tableWidget->selectColumn(index); 
    ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 
} 

void SO_Qt::vhSelected(int index) 
{ 
    ui.tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); 
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems); 
    ui.tableWidget->selectRow(index); 
    ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 
} 

enter image description here

+0

我希望能夠做到這一點,而無需按CNTRL。我想我只需要弄清楚如何在不取消選擇行的情況下調用selectcolumns,反之亦然。這可能是我無法改變的Qt源代碼,所以我可能不得不使用選擇模型,但是我發現這很讓人困惑。 – mpellegr

+1

所以你必須自己實現它。 Qt [文檔](http://harmattan-dev.nokia.com/docs/library/html/qt4/qabstractitemview.html)表示,它需要按住Ctrl鍵來選擇多行。希望你找到解決方案:) – trandatnh

+0

哦,好吧謝謝你的鏈接。 – mpellegr

相關問題