调用改变QAxWidget图形用户界面的函数会使调用者失去焦点。
某些操作会使Windows将活动窗口状态转移到另一个窗口应用程序。当您触发其中一个动作时,您的ActiveX应用程序就会变成活动状态,因此您的客户端应用程序就会失去焦点。
为了避免这种情况,可以编写一个作用域保护,在Windows将焦点转移到你的客户端后,将焦点重置到你的客户端。错 转移了活动状态。
class AxFocusScopeGuard
{
public:
AxFocusScopeGuard(QWidget* parentWidget)
: m_focusedWidget(parentWidget->focusWidget())
{ }
~AxFocusScopeGuard()
{
QCoreApplication::processEvents();
if(m_focusedWidget)
m_focusedWidget->setFocus();
}
private:
QWidget* m_focusedWidget = nullptr;
};
void ActiveXCallHandler::updateGuiActiveX()
{
AxFocusScopeGuard guard(m_parentWidget);
axWidget->dynamicCall("updateYourGui()");
}