Как ждать, пока окно будет скрыто в Qt? - PullRequest
0 голосов
/ 17 октября 2018

Я скрываю окно панели инструментов 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.
}

Но что происходит, Toolbox скрывается только при возврате ProcessData ().Это приводит к тому, что на моем захваченном экране есть панель инструментов.

Есть ли способ подождать, пока панель инструментов будет скрыта в Qt?

1 Ответ

0 голосов
/ 17 октября 2018

Помимо использования QApplication::processEvents, я бы предложил вам более элегантное решение:

  1. Переопределение QWidget::hideEvent класса, возвращаемого Toolbox::getInstance дляподайте сигнал, например, widgetHidden

    protected:
        void hideEvent(QHideEvent *event) {
            QWidget::hideEvent(event);
    
            Q_EMIT widgetHidden();
        }
    
    signals:
        void widgetHidden();
    
  2. Подключите widgetHidden к разъему для захвата экрана

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

    , где MyWidget - классвозвращается Toolbox::getInstance и ClassName - это имя класса, к которому принадлежит ProcessData.

  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
    }
    
...