在QTableWidget中选择行和列,同时保持高亮

3

我有一个QTableWidget,已经设置了无法选择单元格,但可以通过标题选择行/列。我遇到的问题是当我选择一行时,它会取消选中任何已选择的列,同样地,也适用于列/行。我想要实现的是使用ExtendedSelection行为选择行和使用SingleSelection行为选择列,但彼此独立。这是我的代码:

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

}

1个回答

4

这段代码允许您首先选择列,然后必须按住Ctrl键来选择其他行。试试这个,希望它能帮到您。无论如何,这种解决方案与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


我希望能够在不需要按下Ctrl键的情况下完成这个操作。我认为我只需要弄清楚如何调用selectcolumns而不取消选择行,反之亦然。这可能是Qt源代码中我无法更改的部分,所以我可能需要考虑使用选择模型,但我发现这相当令人困惑。 - mpellegr
1
所以你必须自己实现它。Qt 文档 表示需要按住 Ctrl 键才能选择多行。希望你能找到解决方案 :) - trandatnh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接