Select rows and columns in QTableWidget, while keeping highlighted

10,469

This code allows you to select column first then you must press control to select other rows. Try this, I hope it can help. Anyway, this solution doesn't work well with shift.

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

Share:
10,469
mpellegr
Author by

mpellegr

Updated on June 04, 2022

Comments

  • mpellegr
    mpellegr about 2 years

    I have a QTableWidget that I've set up such that you can't select the cells, but can select rows/columns by their headers. The problem I'm having is when I select a row, it deselects any columns that were selected, and same for column/rows. I want to be able to select rows with the ExtendedSelection behavior and columns with the SingleSelection behavior, but independently of eachother. Here's what I'm doing:

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

    Then:

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

    }