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

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

【问题讨论】:

    标签: pyqt 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())
    

    非常适合我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-28
      • 2019-02-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多