Hide the border of the selected cell in qtablewidget in pyqt?

后端 未结 2 733
南笙
南笙 2020-12-16 04:50

Is there a way i can hide the border of the selected cell(or make the border color as white)in a qtablewidget.. By default a border with dotted line is shown.. Can u help me

相关标签:
2条回答
  • 2020-12-16 05:42

    It looks like this dotted border around selected cell you're trying to hide is a focus rectangle. Any given cell can have focus and not be selected at the same time and vice-versa. If you want this border to not get painted use an item delegate. There you can remove State_HasFocus style from the item's state before painting it. Pls, see an example below on how to do this, it's c++, let me know if you have troubles converting it to 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());
    

    hope this helps, regards

    0 讨论(0)
  • 2020-12-16 05:50

    I prefer to do:

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

    You can also change the focus policy using the design tab.

    0 讨论(0)
提交回复
热议问题