执行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。
最佳答案
因为您刚刚创建了popup
,所以在GUI中它还没有存在。即使show()
也不会立即显示它。离开MyWidget::showPopup()
的范围后,GUI事件循环将继续循环并能够处理新的弹出窗口。因此setFocus()
调用为时过早。
但是有帮助正在进行中:QWidget::setFocus()
是插槽,因此您可以调用它。
如果使用计时器(QTimer::singleShot(0, popup, SLOT(setFocus()));
),它应该可以工作。
也许您需要使用10ms而不是0ms。
关于c++ - QAction执行后如何设置焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56787975/