有没有办法我可以在 qtablewidget 中隐藏所选单元格的边框(或使边框颜色为白色)。默认情况下会显示带虚线的边框。你能帮帮我吗...
问问题
8542 次
3 回答
16
我更喜欢这样做:
ui->tableWidget->setFocusPolicy(Qt::NoFocus);
您还可以使用设计选项卡更改焦点策略。
于 2010-11-04T11:26:30.373 回答
15
看起来您要隐藏的选定单元格周围的虚线边框是一个焦点矩形。任何给定的单元格都可以具有焦点并且不能同时被选中,反之亦然。如果您希望此边框不被绘制,请使用项目委托。在那里,您可以在绘制之前从项目的状态中删除 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());
希望这会有所帮助,问候
于 2010-01-14T02:53:06.297 回答
1
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())
非常适合我。
于 2021-12-15T18:52:20.367 回答