选择 QTableWidget 中的行和列,同时保持突出显示

Posted

技术标签:

【中文标题】选择 QTableWidget 中的行和列,同时保持突出显示【英文标题】:Select rows and columns in QTableWidget, while keeping highlighted 【发布时间】:2013-07-22 14:44:39 【问题描述】:

我已经设置了一个 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】:

此代码允许您先选择列,然后您必须按控制选择其他行。试试这个,我希望它可以帮助。无论如何,这个解决方案不适用于 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);

【讨论】:

我希望能够做到这一点而无需按 cntrl。我想我只需要弄清楚如何在不取消选择行的情况下调用选择列,反之亦然。这可能是我无法更改的 Qt 源代码,因此我可能不得不考虑使用选择模型,但我发现这很混乱。 所以你必须自己实现。 Qt document 说它需要按住 Ctrl 键来选择多行。希望你能找到解决办法:)

以上是关于选择 QTableWidget 中的行和列,同时保持突出显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python pyqt4 获取 QTableWidget 中特定行和列的单元格突出显示

转到 QTableWidget 上可视单元格的位置

如何访问选择查询的行和列[关闭]

使用r自动选择.csv文件中的行和列

复杂的行和列操作 pandas

如何在 VBA 中显示选择查询的行和列值