我在一个功能中隐藏了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中隐藏吗?
答案 0 :(得分:2)
除了使用QApplication::processEvents
之外,我还建议您使用更优雅的解决方案:
Toolbox::getInstance
返回的类的{li> 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
}