QAction执行后如何设置焦点

时间:2019-06-27 09:26:43

标签: c++ qt qmenu qaction

执行QAction后,主窗口小部件将失去焦点。 我需要将焦点设置为弹出窗口小部件。

QAction *action = new QAction(tr("show popup"), this);
connect(action, &QAction::triggered, this, &MyWidget::showPopup);
addAction(action);

void MyWidget::showPopup()
{
  QMessageBox* popup = new QMessageBox(this);
  popup->setModal(true);
  popup->show();
  popup->setFocus();
}

MyWidget继承自QWidget。

1 个答案:

答案 0 :(得分:1)

因为您刚刚创建了popup,所以它在GUI中还不是'there'。甚至show()也不会立即显示它。离开MyWidget::showPopup()的范围后,GUI事件循环将继续循环并能够处理新的弹出窗口。因此,setFocus()呼叫来得太早。

但是正在寻求帮助:

QWidget::setFocus()是一个插槽,因此您可以调用它。

如果您使用计时器(QTimer::singleShot(0, popup, SLOT(setFocus()));),它应该可以工作。
也许您需要使用10ms而不是0ms。