我正在使用包含10列的QtableView(qt5.9),并希望在用户单击这些列的标题时禁用第2列和第3列(仅限某些列)的排序。
我使用setsortingenabled标志让我的QtableView允许排序
点击标题后是否应该收听任何信号,然后调用一些合适的方法或拒绝排序。
答案 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());
}
}