2015-05-06 16 views
6

Napisałem aplikację w Qt/C++ na OSX. Po wyjściu z aplikacji, mam łapanie closeevent oknie dialogowymZamknij zgłoszenie aplikacji dwa razy wyżej niż zdarzenie

void MainUI::closeEvent (QCloseEvent *event) 
{ 
    if(DeviceUnplugged == false) { 
     ExitDialog = new DialogExit; 
     ExitDialog->exec(); 
     if(ExitDialog->result() == QDialog::Accepted) { 
      m_device.CloseDevice(); 
      event->accept(); 
     } 
     else { 
      event->ignore(); 
     } 
    } 
} 

Okno jest poprawnie wyświetlane podczas zamykania za pomocą czerwonego krzyża lub za pomocą menu „zamknij”, aby wyświetlić.

ale kiedy zamykam aplikację, klikając prawym przyciskiem myszy na pasku zadań, okno dialogowe pojawia się dwukrotnie, zdarzenie close jest wywoływane dwukrotnie.

Każdy pomysł, dlaczego?

+0

Jaki system operacyjny? Wiele systemów operacyjnych Linux obsługuje także doki. – cmannett85

+0

@ cmannett85 to OSX – Seb

+0

@Seb Czy pojawi się drugie okno dialogowe, jeśli anulujesz pierwsze okno dialogowe zamiast akceptować –

Odpowiedz

2

Tak, myślę, że to normalne dla Maca, przynajmniej miałem to również w mojej aplikacji Qt (tylko na Macu).

użyłem następujące rozwiązania:

void MainUI::closeEvent (QCloseEvent *event) 
{ 
    if (m_closing) 
    { 
     event->accept(); 
     return; 
    } 
    if(DeviceUnplugged == false) { 
     ExitDialog = new DialogExit; 
     ExitDialog->exec(); 
     if(ExitDialog->result() == QDialog::Accepted) { 
      m_device.CloseDevice(); 
      m_closing = true; 
      event->accept(); 
     } 
     else { 
      event->ignore(); 
     } 
    } 
} 

Domyślnie zmienna logiczna M_ closing powinien być zainicjowany przez false oczywiście w swojej klasie. W ten sposób za drugim razem nic nie zostanie zrobione (przetwarzanie zostanie pominięte). To działało dla mnie.

+0

Czy znalazłeś jakieś inne rozwiązanie lub wyjaśnienie dotyczące tego rodzaju problemu? Problem został złapany tylko za pomocą Command + Q. – htzfun

+0

Nie, przepraszam. Miałem tylko to obejście :( – demonplus

1

Wygląda na to, że jest to bug QT: Patrz: https://bugreports.qt.io/browse/QTBUG-43344

Również ten problem przy użyciu qt-5.6_4,
W moim przypadku stało się to przy użyciu CMD + Q, ale tak się nie stało podczas korzystania czerwony przycisk x.

Używana podobna łatka.
unikałem zaakceptować lub ignorować ponieważ jest to błąd i nie sądzę, powinniśmy „mówić do niego” :-)

Zamiast po prostu wrócić, gdy nazywa się więcej niż jeden raz.

static int numCalled = 0; 
if (numCalled++ >= 1) 
    return; 
Powiązane problemy