Поскольку вы только что создали popup
, он еще не «там» в графическом интерфейсе.Даже show()
не сразу показывает это.После того, как вы покинете область действия MyWidget::showPopup()
, цикл событий графического интерфейса продолжит цикл и сможет обработать ваше новое всплывающее окно.Таким образом, вызов setFocus()
поступает слишком рано.
Но помощь в процессе:
QWidget::setFocus()
- это слот, поэтому вы можете вызвать его.
Если вы используететаймер (QTimer::singleShot(0, popup, SLOT(setFocus()));
), он должен работать.
Возможно, вам нужно будет использовать 10 мс вместо 0 мс.