2016-07-24 2 views
1

Im пытается сделать небольшой инструмент, который должен быть скрыт при запуске, так им делать:Qt MainWindow Выход после QMessageBox закрыт

w.showMinimized(); 
w.hide(); 

на main.cpp, который называет мое MainWindow в скрытом режиме, но проблема заключается в том, что, когда я называю FinishSession(), которая является функцией от класса ProductDlg которая вызывается из MainWindow Конечно, существует всякий раз, когда я нажимаю «Да или Нет» из QMessageBox вы видите ниже

void ProductsDlg::FinishSession() 
{ 
    if(Session) 
    { 
     if(this->isActiveWindow()) 
     { 
      this->hide(); 
     } 

     QMessageBox::StandardButton _finishSession = QMessageBox::question(this , "Question" , "Do you wanna Finish the Session ?" , QMessageBox::Yes | QMessageBox::No); // THIS MESSAGEBOX - IT EXISTS AFTER THIS 

     if(_finishSession == QMessageBox::Yes) 
     { 
      Session = false; 
     } 
    } 
    else 
    { 
     qDebug() << "No Session is Running"; 
    } 
} 

Это от MainWindow.cpp, где я звоню ProductsDlg:

bool MainWindow::nativeEvent(const QByteArray &eventType , void *message , long *result) 
{ 
    Q_UNUSED(eventType); 
    Q_UNUSED(result); 

    MSG * msg = static_cast<MSG*>(message); 
    if(msg->message == WM_HOTKEY) 
    { 
     if(msg->wParam == 0) 
     { 
      if(!pd->isVisible()) 
      { 
       QRect rect = QApplication::desktop()->availableGeometry(); 
       pd->show(); 
       pd->setFocus(); 
       pd->activateWindow(); 
       pd->move(rect.width() - pd->width() , rect.height()); 
       QPropertyAnimation *ani = new QPropertyAnimation(pd , "pos"); 
       ani->setDuration(700); 
       ani->setStartValue(pd->pos()); 
       ani->setEndValue(QPoint(rect.width() - pd->width() , rect.height() - pd->height())); 
       ani->start(); 
      } 
      else if(!pd->isActiveWindow()) 
      { 
       pd->activateWindow(); 
      } 
      else if(pd->isActiveWindow()) 
      { 
       pd->hide(); 
      } 
     } 

     else if(msg->wParam == 1) 
     { 
      pd->FinishSession(); 
     } 

     else if(msg->wParam == 2) 
     { 
      if(pd->isActiveWindow()) 
      { 
       pd->hide(); 
      } 
     } 

     else 
     { 
      return false; 
     } 
    } 
    else 
    { 
     return false; 
    } 
} 

'pd' определяется глобально и инициализируется конструктором MainWindow.

ответ

Смежные вопросы