с фокусом вопрос решается так:
void QWidget::setFocusProxy ( QWidget * w )
Sets the widget's focus proxy to widget w. If w is 0, the function resets this widget to have no focus proxy.
Some widgets can "have focus", but create a child widget, such as QLineEdit, to actually handle the focus. In this case, the widget can set the line edit to be its focus proxy.
setFocusProxy() sets the widget which will actually get focus when "this widget" gets it. If there is a focus proxy, setFocus() and hasFocus() operate on the focus proxy.
либо можете устанавливать фильтр событий в окне верхнего уровня для интересующих вас виджетов. это же справедливо для перехвата событий клавиатуры и проч. почитайте об eventFilter.