通过单击QTableWidget中的标题禁用选择行或列

时间:2011-03-24 15:55:42

标签: qt qt4 qtablewidget

我有一个QTableWidget,我想禁用单击行或列标题时选择行或列的行为。

有谁知道如何禁用此行为?

修改 标题需要保持可点击状态,因为需要使用onClick功能。

7 个答案:

答案 0 :(得分:2)

tableWidget->setSelectionMode(QAbstractItemView::NoSelection); 此属性保存视图操作的选择模式。SelectionMode

或许你需要tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows ) 此属性保存视图使用的选择行为。 SelectionBehavior

答案 1 :(得分:1)

QTableWidget::setSortingEnabled(true);

这消除了您描述的列选择行为,并将其交换以按列排序!

答案 2 :(得分:1)

有几种方法可以做到这一点

  1. 简单的方法不太好:)(并依赖于Qt实现作为一切:): 在表格视图中,其水平标题 sectionPressed(int)连接到表 selectColumn(int),因此您可以简单地断开它们:((对于垂直标题也一样)
  2. 您可以ipmlement表视图虚拟 selectionCommand(const QModelIndex&,const QEvent * event)界面并返回“ 无选择 ” event为0(因为点击标题区时为0)
  3. 最后是最好的原始解决方案:您可以拥有然后为表及其标题(或标题)设置自己的 selectionModels ,并根据需要重新实现选择行为。

答案 3 :(得分:1)

您可能希望将selectColumn插槽与标头的sectionPressed信号断开连接,其中包括以下内容:

disconnect(horizontalHeader(), SIGNAL(sectionPressed(int)),this, SLOT(selectColumn(int)));

答案 4 :(得分:0)

您可以尝试将false设置为函数setClickable

QTableWidget::horizontalHeader()->setClickable(false);

如果这样做,那么你可以对[verticalHeader] [2]

做同样的事情

[2]:http://doc.qt.nokia.com/latest/qtableview.html#verticalHeader“verticalHeader”

答案 5 :(得分:0)

我知道这个问题的答案。

disconnect(yourTableWidget->horizontalHeader(), SIGNAL(sectionPressed(int)),yourTableWidget, SLOT(selectColumn(int)));

答案 6 :(得分:-1)

如果Qt for Python是可以接受的,那么这样做可以为我工作:

def setModel(self, model): super().setModel(model) self.horizontalHeader().sectionPressed.disconnect()

显然,信号已在setModel中连接。我只是断开了一切连接。