我想知道是否有一种方法可以禁用QTableWidget单击单元格时出现的灰色虚线边框,谢谢。
C++: tableWidget->setFocusPolicy(Qt::NoFocus);
Python: tableWidget.setFocusPolicy(QtCore.Qt.NoFocus)
注意,这样做将失去处理键盘事件的能力,但鼠标事件将正常工作。
看起来您希望在单元格获得焦点时去掉边框。
请尝试按以下方式编辑样式表。
QTableWidget {
outline: 0;
}
这对我非常有效。
setFocusPolicy( Qt::NoFocus )
如果不影响小部件的焦点策略并使用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;
}
qApp->setStyleSheet ( " QTableWidget::item:focus { border: 0px }" );
QTableWidget::item:focus { border: 0px; background-color: #<your selection background color> }
- swdevQPushButton { outline: none; }
QPushButton { outline: none; }