QWidget::show() асинхронный вызов, т.е. наличие окна после него не является обязательным.
Перегрузи QWidget::showEvent() и уже в нём делай граб.
Это интересно, спасибо, не знал
попробовал сделать так, но не заработало
void Widget::showEvent(QShowEvent *event)
{
ui->frame->grabMouse();
}
Вообще, в доке написано, что это событие (showEvent) - если оно non spontaneous - приходит до появления окна (а оно именно non spontaneous).
А как бы получить уведомление от оконной системы, что окно уже реально видимо?
Кстати, попробовал сделать grabMouse() с задержкой
QTimer::singleShot(100, this, SLOT(timeout_slot())); // в timeout_slot() делаю ui->frame->grabMouse()
и так вот работает. Так что мы на верном пути, осталось понять как его "завершить"