有没有办法隐藏QTableWidget中选定单元格的边框(或将边框颜色设置为白色)?默认情况下,会显示一个带虚线的边框。您能帮助我吗?
有没有办法隐藏QTableWidget中选定单元格的边框(或将边框颜色设置为白色)?默认情况下,会显示一个带虚线的边框。您能帮助我吗?
我倾向于这样做:
ui->tableWidget->setFocusPolicy(Qt::NoFocus);
你也可以使用设计选项卡更改焦点策略。
看起来你试图隐藏的选定单元格周围的点状边框是一个焦点矩形。任何给定的单元格都可以具有焦点,但并非同时被选中,反之亦然。如果您不想绘制此边框,请使用项目代理。在那里,您可以在绘制之前从项目的状态中删除State_HasFocus样式。请参见下面的示例,演示如何进行操作,它使用c++编写,如果您在将其转换为python时遇到麻烦,请告诉我。
// custom item delegate class
class NoFocusDelegate : public QStyledItemDelegate
{
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};
void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOption(option);
if (itemOption.state & QStyle::State_HasFocus)
itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
QStyledItemDelegate::paint(painter, itemOption, index);
}
...
// set the item delegate to your table widget
ui->tableView->setItemDelegate(new NoFocusDelegate());
希望这能有所帮助,谢谢。
Qt::NoFocus
会移除QTableWidget
中行的选中状态。
接受答案的Python3/PySide2
版本:
class NoFocusDelegate(QtWidgets.QStyledItemDelegate):
def paint(self, painter: PySide2.QtGui.QPainter, option: PySide2.QtWidgets.QStyleOptionViewItem, index: PySide2.QtCore.QModelIndex) -> None:
itemOption = QtWidgets.QStyleOptionViewItem(option)
if option.state & QtWidgets.QStyle.State_HasFocus:
itemOption.state = itemOption.state ^ QtWidgets.QStyle.State_HasFocus
super().paint(painter, itemOption, index)
table.setItemDelegate(NoFocusDelegate())
对我来说完美地运作。