如何将 QTableWidget 设置为仅允许按标题选择?

Posted

技术标签:

【中文标题】如何将 QTableWidget 设置为仅允许按标题选择?【英文标题】:How to set QTableWidget to only allow selection by headers? 【发布时间】:2013-07-18 21:28:10 【问题描述】:

我正在尝试禁止用户选择表格小部件中的单个单元格,我只想能够选择列和行标题,并使用它们自己的单独选择行为。这是我尝试过的:

ui->tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
ui->tableWidget->horizontalHeader()->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget->verticalHeader()->setSelectionMode(QAbstractItemView::MultiSelection);

但它不允许我选择任何东西,而且我找不到一种方法来设置仅针对单元格的选择行为。有人吗?

编辑: 我尝试连接到表格小部件垂直和水平标题的 sectionClicked 信号,即使表格小部件的选择设置为无,这些似乎也在发射,但它们不会保持突出显示。

【问题讨论】:

【参考方案1】:

setSelectionMode 默认为 NoSelection 以忽略小部件上的所有选择。然后按照以下代码连接以触发 hhSelected 和 vhSelected 插槽。在这些插槽中,您只需设置相应的 selectionMode 和 SelectionBehavior。

SO_Qt::SO_Qt(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)

    ui.setupUi(this);
ui.tableWidget->setSelectionMode(QAbstractItemView::NoSelection);

QHeaderView* hh = ui.tableWidget->horizontalHeader();
bool success = connect(hh, SIGNAL(sectionClicked( int )), this, SLOT(hhSelected(int)));

QHeaderView* vh = ui.tableWidget->verticalHeader();
success = connect(vh, SIGNAL(sectionClicked( int )), this, SLOT(vhSelected(int)));


void SO_Qt::hhSelected( int index )

    ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);
    ui.tableWidget->selectColumn(index);


void SO_Qt::vhSelected( int index )

    ui.tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui.tableWidget->selectRow(index);

【讨论】:

我使用了这个,但在选择行/列后我重置为 NoSelection。这有点hacky,但至少它做了我想要的。非常感谢! 我在使用此解决方案时遇到问题。如果您想回答,我创建了另一个问题:***.com/questions/17790509/…

以上是关于如何将 QTableWidget 设置为仅允许按标题选择?的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本字段限制为仅有效的小数?

Oracle Apex:如何将表单中的数字字段限制为仅允许数字?

无法将文本字段设置为仅数字和逗号/点

将本地通知设置为仅在清醒时间触发

如何在实时数据输入期间将 QTableWidget 设置为始终滚动到底部

如何只允许在 QTableWidget 中多次选择某些项目?