PyQt PySide Менять фокус стрелками, а не tab'ом. Смена стиля при смене фокуса

Вопрос 1: Есть 3 простых виджета. Каждый из них при попадании в фокус должен получать стиль. Такое не работает:

if self.btn.hasFocus():
    self.setStyleSheet(st)

Можно сделать по отдельному классу для каждого виджета и там прописать

def focusInEvent(self, e):
    self.setStyleSheet(st)
def focusOutEvent(self, e):
    self.setStyleSheet(" ")
    

Работает, но не подходит.

Вопрос 2. Как переопределить поведение стрелок влево-вправо и ходить между виджетами стрелками, а не tab\tab+shift.

from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
import sys

st = "border: 3px solid; border-color:red;"

class InFocus(QWidget):
    def __init__(self, parent=None):
        super(InFocus, self).__init__(parent)
        hbox = QHBoxLayout()
        self.btn = QPushButton()
        self.le = QLineEdit()
        self.sb = QSpinBox()
        hbox.addWidget(self.btn)
        hbox.addWidget(self.le)
        hbox.addWidget(self.sb)
        self.setLayout(hbox)

    def keyPressEvent(self, keyEvent):
        super().keyPressEvent(keyEvent)
        key = keyEvent.key()
        if key == Qt.Key_Right:
            pass                   # tab
        elif key == Qt.Key_Left:
            pass                   # tab+shift


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = InFocus()
    w.resize(300, 100)
    w.show()
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: Garp

Нашёл ответ на первый вопрос

st = """QPushButton{ background-color: cyan; }
        QPushButton:focus{background-color: 
             cyan;border: 2px solid; border-color:brown;}"""
self.btn.setStyleSheet(st)

И так для каждого виджета.

→ Ссылка