【问题标题】:QAxWidget steals focus from client applicationQAxWidget 从客户端应用程序中窃取焦点
【发布时间】:2020-04-29 12:48:02
【问题描述】:

调用更改 QAxWidget 的 GUI 的函数会使调用者失去焦点。 我怎样才能避免这种情况?

【问题讨论】:

    标签: qt activex qaxwidget


    【解决方案1】:

    某些操作使 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()");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多