如何在 QTableWidget 中禁用选择突出显示?

问题描述 投票:0回答:4

我有一个带有禁用

QTableWidget
(
setSelectionMode
) 的
QTableWidget::NoSelection
,并且我填写的
QTableWidgetItem
没有
Qt::ItemIsEditable
标志。

尽管如此,已单击的单元格会获得某种光标(在我的例子中底部的黑线):

Highlighted cell

如何禁用这个“光标”?

qt qt4 selection highlight qtablewidget
4个回答
31
投票
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableWidget->setFocusPolicy(Qt::NoFocus);
tableWidget->setSelectionMode(QAbstractItemView::NoSelection);

这些语句将禁用表格中单元格的选择。


15
投票

这有帮助吗?

QPalette palette = tableWidget->palette();
palette.setBrush(QPalette::Highlight,QBrush(Qt::white));
palette.setBrush(QPalette::HighlightedText,QBrush(Qt::black));
tableWidget->setPalette(palette);

详细说明一下: 项目的外观由视图的调色板控制,您可以使用

TableWidget::palette()
方法检索该调色板。请注意,它返回为
const
,因此您可以获得一个副本,对其进行更改,然后使用
setPalette
应用它。另请注意,这里我只是将单元格颜色设置为白色,将文本颜色设置为黑色,理想情况下,您可以将其专门设置为默认单元格颜色(也可以从调色板中获取)。最后请注意,在我的情况下,该项目仍然保留与默认边框不同的边框,我没有尝试在此处解决这一问题。

您可以阅读有关各种颜色定义的更多详细信息,例如这里(对于 Qt 4.8)http://qt-project.org/doc/qt-4.8/qpalette.html#ColorRole-enum

编辑:更多的筛选似乎您应该在与小部件交互(而不是选择)时通过设置整个小部件的焦点策略来消除小部件周围的任何边框,如下所示:

tableWidget->setFocusPolicy(Qt::NoFocus);

如果这不起作用,那么我很快就没有想法了。


2
投票

以下解决方案对我有用:

tableWidget->setFocusPolicy(Qt::NoFocus);

但问题是,你无法使用键盘在

QTableWidget
上上下移动。

所以我认为这个解决方案不好。


0
投票

您可以尝试将选择设置为透明作为解决方法并保持焦点:

QTableView::item::selected
{
    background-color: transparent;
}
© www.soinside.com 2019 - 2024. All rights reserved.