如何等待窗口隐藏在Qt中?



我在我的一个函数中隐藏了一个Qt工具箱窗口。我需要做一些屏幕捕获的东西,以便在隐藏我的工具箱窗口后在函数中执行。

void ProcessData()
{
Toolbox::getInstance()->hide(); //I am trying to hide toolbox here
//screen capture stuffs.   -  It should be executed once the toolbox window is hidden.
}

但是发生的情况是,工具箱只有在ProcessData((返回时才被隐藏。这导致了我捕获的屏幕具有工具箱的问题。

有没有办法等待工具箱隐藏在Qt中?

除了使用QApplication::processEvents,我建议您一个更优雅的解决方案:

  1. 重新实现Toolbox::getInstance返回的类的QWidget::hideEvent以发出信号,例如widgetHidden

    protected:
    void hideEvent(QHideEvent *event) {
    QWidget::hideEvent(event);
    Q_EMIT widgetHidden();
    }
    signals:
    void widgetHidden();
    
  2. widgetHidden连接到插槽以捕获屏幕

    connect(Toolbox::getInstance(), &MyWidget::widgetHidden, this, &ClassName::onWidgetHidden);
    

    其中MyWidgetToolbox::getInstance返回的类,ClassNameProcessData所属类的名称。

  3. 添加一个标志以了解是否是捕获的正确时间,因为小部件可能以其他方式隐藏

    bool m_captureAllowed = false;
    
  4. 实现onWidgetHidden

    private slots:
    void onWidgetHidden() {
    if (m_captureAllowed) {
    m_captureAllowed = false;
    //screen capture stuffs
    }
    }
    
  5. ProcessData中设置标志

    void ProcessData()
    {
    m_captureAllowed = true;
    Toolbox::getInstance()->hide(); //I am trying to hide toolbox here
    }
    

最新更新