我在我的一个函数中隐藏了一个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
,我建议您一个更优雅的解决方案:
-
重新实现
Toolbox::getInstance
返回的类的QWidget::hideEvent
以发出信号,例如widgetHidden
protected: void hideEvent(QHideEvent *event) { QWidget::hideEvent(event); Q_EMIT widgetHidden(); } signals: void widgetHidden();
-
将
widgetHidden
连接到插槽以捕获屏幕connect(Toolbox::getInstance(), &MyWidget::widgetHidden, this, &ClassName::onWidgetHidden);
其中
MyWidget
是Toolbox::getInstance
返回的类,ClassName
是ProcessData
所属类的名称。 -
添加一个标志以了解是否是捕获的正确时间,因为小部件可能以其他方式隐藏
bool m_captureAllowed = false;
-
实现
onWidgetHidden
槽private slots: void onWidgetHidden() { if (m_captureAllowed) { m_captureAllowed = false; //screen capture stuffs } }
-
在
ProcessData
中设置标志void ProcessData() { m_captureAllowed = true; Toolbox::getInstance()->hide(); //I am trying to hide toolbox here }