在pyqt中隐藏qtablewidget中选定单元格的边框?

Posted

技术标签:

【中文标题】在pyqt中隐藏qtablewidget中选定单元格的边框?【英文标题】:Hide the border of the selected cell in qtablewidget in pyqt? 【发布时间】:2011-01-04 13:41:43 【问题描述】:

有没有办法我可以在 qtablewidget 中隐藏所选单元格的边框(或使边框颜色为白色)。默认情况下会显示带虚线的边框。你能帮帮我吗...

【问题讨论】:

【参考方案1】:

我更喜欢这样做:

ui->tableWidget->setFocusPolicy(Qt::NoFocus);

您还可以使用设计选项卡更改焦点策略。

【讨论】:

.. 但这样做会失去键盘导航功能【参考方案2】:

看起来您要隐藏的选定单元格周围的虚线边框是一个焦点矩形。任何给定的单元格都可以具有焦点并且不能同时被选中,反之亦然。如果您希望此边框不被绘制,请使用项目委托。在那里,您可以在绘制之前从项目的状态中删除 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());

希望这会有所帮助,问候

【讨论】:

非常感谢您的回复。我用 setFocusPolicy(QtCore.Qt.NoFocus) 实现了同样的效果,因为我使用了 qtablewidget 。虽然我不熟悉代表。我可以t upvote this answer..它说信誉点必须大于 15..【参考方案3】:

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())

非常适合我。

【讨论】:

以上是关于在pyqt中隐藏qtablewidget中选定单元格的边框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyqt中更改Qtablewidget的特定单元格背景颜色

在 QTableWidget PyQt5 中突出显示单元格

在 PyQt 中将多个小部件添加到 QTableWidget 单元格

从 PyQt5 中的 QTableWidget 中删除单元格填充

如何使用 PYQT5 使 QTableWidget 单元格只读?

PyQt5如何使用python在迭代循环中更新单元格值Qtablewidget