QTableView禁用某些列

时间:2017-11-09 06:29:02

标签: qt qtableview qtcore qt-signals

我正在使用包含10列的QtableView(qt5.9),并希望在用户单击这些列的标题时禁用第2列和第3列(仅限某些列)的排序。

  • 我使用setsortingenabled标志让我的QtableView允许排序

  • 点击标题后是否应该收听任何信号,然后调用一些合适的方法或拒绝排序。

2 个答案:

答案 0 :(得分:1)

一种更简单的方法(至少对我而言)是对过滤器代理进行子类化,并仅对禁用列进行排序。下面的代码是使用Python编写的,但这是对C ++的简单翻译。

def CustomSorter(QtCor.QSortFilterProxyModel):
  def sort(self, column: int, order: QtCore.Qt.SortOrder) -> None:
    if column == 2 or column == 3:
      # Do nothing instead of sorting
      return
    else:
      # Sort as usual
      super().sort(column, order)

答案 1 :(得分:0)

您可以使用标题信号sortIndicatorChanged恢复当前的排序指示符。

示例:

    connect(m_poTableView->header(), &QHeaderView::sortIndicatorChanged,
            this, &MyClass::HandleIndicatorChanged);


    MyClass::HandleIndicatorChanged(int logicalIndex, Qt::SortOrder eSort)
    {
       if (logicalIndex != 0)
       {
             this->m_poTableView->horizontalHeader()->setSortIndicator(
                0, this->m_poTableView->model()->sortOrder());
       }
    }