c++ - 如何等待窗口在 Qt 中被隐藏?

标签 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中隐藏?

最佳答案

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

  1. 重新实现 QWidget::hideEvent Toolbox::getInstance 返回的类发出信号,例如小部件隐藏

    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
    }
    

关于c++ - 如何等待窗口在 Qt 中被隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52856435/

相关文章:

c++ - QAbstractItemModel for QMetaObject,必须自己写吗?

c++ - 静态 QApplication 变量使 Mac 在退出时报告崩溃

Qt 颜色选择器小部件?

c++ - 使用带按钮的 qt 表

c++ - g++ 编译选项 -std=c++14 编译错误显示 Werror=c++11-compat

c++ - vector 迭代器不兼容

c++ - 如何使用 Valgrind 和 Qt Creator 调试远程应用程序?

Qt5 & QtQuick2 - 透明主窗口

c++ - union 初始化失败

c++ - 如何使用 Boost 库序列化结构中的 union ?