如何禁用QTableView的整列选择?

3

void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)

这个函数接受三个值:为选择项目,为选择行和选择单元格。

问题:

我需要当单击单元格时,选中该单元格;当单击行索引时,选中整行;但是当单击列标题时,不应选中整列。我理解无法使用此函数实现这一点。

我需要表视图的行为与设置SelectionBehavior::selectItems时完全相同。

但是当用户单击标题时,不应选择列。

我正在考虑禁用QHeaderView的列选择,但找不到方法?


1
你尝试过在页眉视图的特定部分过滤点击事件吗? - vahancho
1个回答

3

来自我的应用程序:

    // get header from QTableView tableView (replace with your widget name)
    QHeaderView *header = new QHeaderView(Qt::Horizontal, tableView);
#if QT_VERSION < 0x50000
// Qt 4.8.1
    header->setResizeMode(QHeaderView::ResizeToContents);
#else
// Qt 5.2.0
    header->setSectionResizeMode(QHeaderView::ResizeToContents);
#endif
    header->setHighlightSections(false); // this is what you want

setHighlightSections(bool)插槽适用于Qt 4和Qt 5。

编辑: 疏忽之处请原谅!仅当您使用SelectRows或SelectItems与SingleSelection时才有效。您可以在源代码qheaderview.cppqtableview.cpp中找到证据,插槽voidQHeaderView :: mousePressEvent(QMouseEvent * e); voidQTableViewPrivate :: selectColumn(int column,bool anchor);

对于SelectItems,可以使用此插槽:

    header->setClickable(false);

这并没有帮助。我认为这是关于突出显示部分,而不是选择列。您能否请再确认一下? - Ashot
没错!我的情况是选择行。如果您没有在标题上使用任何点击事件,您可以通过setClickable(false)来禁用选择列。我已经编辑了我的答案。 - re_things
setClickable现已过时,请改用setSectionsClickable:https://doc.qt.io/archives/qt-5.11/qheaderview-obsolete.html#setClickable - Saar Drimer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接