Ocultar a borda da célula selecionada no QTableWidget no PYQT?
-
20-09-2019 - |
Pergunta
Existe uma maneira de ocultar a borda da célula selecionada (ou fazer a cor da borda branca) em um qtablewidget .. por padrão, uma borda com linha pontilhada é mostrada .. você pode me ajudar ...
Solução
Parece que essa borda pontilhada em torno da célula selecionada que você está tentando esconder é um retângulo de foco. Qualquer célula determinada pode ter foco e não ser selecionada ao mesmo tempo e vice-versa. Se você deseja que essa borda não seja pintada, use um delegado de item. Lá você pode remover o estilo state_hasfocus do estado do item antes de pintá -lo. Por favor, veja um exemplo abaixo sobre como fazer isso, é C ++, deixe -me saber se você tiver problemas para convertê -lo em 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());
Espero que isso ajude, considerando
Outras dicas
Eu prefiro fazer:
ui->tableWidget->setFocusPolicy(Qt::NoFocus);
Você também pode alterar a política de foco usando a guia Design.