我在我的一个函数中隐藏了一个 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
,我会建议你一个更优雅的解决方案:
重新实现
QWidget::hideEvent
Toolbox::getInstance
返回的类发出信号,例如小部件隐藏
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 }
关于c++ - 如何等待窗口在 Qt 中被隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52856435/