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

时间:2018-10-17 13:45:29

标签: c++ qt qt5

我在一个功能中隐藏了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中隐藏吗?

1 个答案:

答案 0 :(得分:2)

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

    重新实现Toolbox::getInstance返回的类的{li>

    QWidget::hideEvent以发出信号,例如widgetHidden

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

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

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

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

    bool m_captureAllowed = false;
    
  3. 安装onWidgetHidden插槽

    private slots:
        void onWidgetHidden() {
            if (m_captureAllowed) {
                m_captureAllowed = false;
                //screen capture stuffs
            }
        }
    
  4. ProcessData

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