• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Qt Creator QThreat::sleep(sec)

VPS Starter Arubacloud
0 głosów
805 wizyt
pytanie zadane 20 lipca 2016 w C i C++ przez kacperdyba Gaduła (3,290 p.)

Cześć,

 

Od pewnego czasu pisze sobie coś tam w Qt Creatorze, czasem wychodzi, czasem mniej. Ale ostatnio natrafiłem na problem którego ni jak nie mogę rozwiązać. Piszę sobie prostą grę w pamięć, plansza 4x4 karty trzeba zapamiętać gdzie która jest i "zrzucić" wszystkie. Okodowanie wszystkiego nie zajeło mi dużo czasu, wszystko działa prócz jednej rzeczy. po kliknięciu na 1 kartę zostaje ona odsłonięta, ale po kliknięciu w 2 powinna ona zostać odsłonięta, a następnie zależnie od rezultatu usunięta lub powrotnie zakryta. Cały problem polega na tym, że zanim karta zdąży zostać odsłonięta i pokazana automatycznie zostaje albo zakryta (wraz ze wcześniejszą kartą) albo usunięta bez pokazania.

 

I tu rodzi się pytanie: jak zrobić tak aby karta przez moment widniała a następnie znikała? Próbowałem po odsłonięciu urzyć opcji QThreat::sleep(1) (sleep odlicza czas w sekundach, próbowałem też 1000), ale rezultat jest taki że karta nadal nie zostaje odsłonięta tylko program czeka 1s a następnie dopiero zrzuca kartę tak jak poprzednio. Czy ktoś wie jak to naprawić? Dołączam fragmęt kodu, a dokładniej funkcji realizującej pojawianie się i znikanie kart.

 

void MainWindow::set(int a)
{
    switch(card[a])
    {
    case 0:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/as_wino.png');");
        break;
    case 1:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/as_czerwień.png');");
        break;
    case 2:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/as_dzwonek.png');");
        break;
    case 3:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/as_żołądź.png');");
        break;
    case 4:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/kr_wino.png');");
        break;
    case 5:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/kr_czerwień.png');");
        break;
    case 6:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/kr_dzwonek.png');");
        break;
    case 7:
     cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/kr_żołądź.png');");
        break;
    }

    if (active == true)
    {
//tutaj daje sleep
        if(card[a] == card[last])
        {

            cardsbutton[a]->close();
            cardsbutton[last]->close();
        }
        else
        {
            cardsbutton[a]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/r.jpg');");
            cardsbutton[last]->setStyleSheet("width: 86; height: 129; background-image: url('C:/Users/Kacper/Desktop/karty/r.jpg');");
            cardsbutton[last]->setEnabled(true);
        }
        active = false;
    }
    else
    {
        last = a;
        active = true;
        cardsbutton[a]->setDisabled(true);
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 20 lipca 2016 przez niezalogowany

Sleep usypia wątek więc siłą rzeczy aplikacja przestaje byś responswyna - sleep to zły trop.

Wykorzystaj klasę [QTimer] i np metodę singleShot() do wywoływania funkcji odpowiedzialnej za ukrywanie karty po określonym czasie

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
+1 głos
1 odpowiedź 470 wizyt
0 głosów
1 odpowiedź 1,024 wizyt
pytanie zadane 4 listopada 2017 w C i C++ przez Michulec7 Nowicjusz (170 p.)

92,974 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...