如何将 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:如何将表单中的数字字段限制为仅允许数字?