QAxWidget从客户端应用中抢走焦点。

问题描述 投票:0回答:1

调用改变QAxWidget图形用户界面的函数会使调用者失去焦点。

qt activex qaxwidget
1个回答
0
投票

某些操作会使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()");
}
© www.soinside.com 2019 - 2024. All rights reserved.