执行QAction后如何设置焦点
How to set focus after execution 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。
因为您刚刚创建了 popup
,它还没有 'there' 在 GUI 中。即使 show()
也不会立即显示出来。在您离开 MyWidget::showPopup()
的范围后,GUI 事件循环将继续循环并能够处理您的新弹出窗口。因此 setFocus()
调用来得太早了。
但正在提供帮助:
QWidget::setFocus()
是一个插槽,所以你可以调用它。
如果您使用计时器 (QTimer::singleShot(0, popup, SLOT(setFocus()));
),它应该可以工作。
也许您需要使用 10 毫秒而不是 0 毫秒。
主小部件在执行 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
,它还没有 'there' 在 GUI 中。即使 show()
也不会立即显示出来。在您离开 MyWidget::showPopup()
的范围后,GUI 事件循环将继续循环并能够处理您的新弹出窗口。因此 setFocus()
调用来得太早了。
但正在提供帮助:
QWidget::setFocus()
是一个插槽,所以你可以调用它。
如果您使用计时器 (QTimer::singleShot(0, popup, SLOT(setFocus()));
),它应该可以工作。
也许您需要使用 10 毫秒而不是 0 毫秒。