Qt QTableWidget的选中单元格周围有灰色点状边框

17

我想知道是否有一种方法可以禁用QTableWidget单击单元格时出现的灰色虚线边框,谢谢。

6个回答

17

C++: tableWidget->setFocusPolicy(Qt::NoFocus);

Python: tableWidget.setFocusPolicy(QtCore.Qt.NoFocus)

注意,这样做将失去处理键盘事件的能力,但鼠标事件将正常工作。


16

看起来您希望在单元格获得焦点时去掉边框。

请尝试按以下方式编辑样式表。

QTableWidget {
    outline: 0;
}

这对我非常有效。


真正简单的答案 - Mike Bourbeau

8
那个灰色的虚线边框表示该小部件获得了焦点。 在小部件级别设置以下内容应该就可以解决问题。
setFocusPolicy( Qt::NoFocus )

8

如果不影响小部件的焦点策略并使用qss,对我来说最简单的方法是创建以下自定义委托并将其安装到表中:

*.h:

class FocusControlDelegate : public QStyledItemDelegate {
    public:
        FocusControlDelegate(QObject *parent = 0);
        virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const;        
        void setFocusBorderEnabled(bool enabled);

    protected:
        bool f_focus_border_enabled;
    };

*.cpp:

FocusControlDelegate::FocusControlDelegate(QObject *parent) : QStyledItemDelegate(parent) {
    f_focus_border_enabled = false;
}

void FocusControlDelegate::setFocusBorderEnabled(bool enabled) {
    f_focus_border_enabled = enabled;
}

void FocusControlDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const {
    QStyledItemDelegate::initStyleOption(option, index);
    if(!f_focus_border_enabled && option->state & QStyle::State_HasFocus)
        option->state = option->state & ~QStyle::State_HasFocus;
}

5

qApp->setStyleSheet ( " QTableWidget::item:focus { border: 0px }" );

可以设置QTableWidget中的焦点项边框宽度为0。

1
几乎了解了,但如果我们使用备用背景颜色,它会将选择背景颜色更改为备用背景颜色。添加此修复 QTableWidget::item:focus { border: 0px; background-color: #<your selection background color> } - swdev

0

QPushButton { outline: none; }

QPushButton { outline: none; }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接