https://github.com/naghim/fft-lab04
https://github.com/naghim/fft-lab04
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/naghim/fft-lab04
- Owner: naghim
- Created: 2023-02-24T10:32:37.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-04T07:23:45.000Z (almost 2 years ago)
- Last Synced: 2025-01-08T02:53:03.484Z (about 1 year ago)
- Size: 4.88 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Labor 04
Signal-slot mechanizmusra [példa](https://doc.qt.io/qt-6/signalsandslots.html).
## Feladatok
1. Készítsünk egy nyomógomb (`QPushButton`) osztályt, mely csak a jobb egérgomb klikkre reagál (például nyisson meg egy felugró ablakot, amelyben kiírja, hogy "Jobb klikk"). Teszteljük a működését.
2. Hozzunk létre egy `Q Console Application`-t. Implementáljunk egy `TemperatureSensor` nevű osztályt, amely hőmérsékletméréseket szimulál. Definiáljunk egy eseményt (`void TemperatureSensor::temperatureExceeded(int)`), amely akkor következik be/váltódik ki, ha a hőmérséklet meghalad egy küszöbértéket (pl. 30°C). `QTimer` segítségével másodpercenként véletlenszerűen generáljunk hőmérséklet-leolvasásokat (20°C és 40°C között):
```cpp
TemperatureSensor::TemperatureSensor(QObject *parent = nullptr) : QObject(parent) {
// QTimer az értékek periódikus generálására (1 másodpercenként)
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){
// ide jön a számok generálása
});
timer->start(1000);
}
```
Implementáljunk egy `CoolingSystem` nevű osztályt, amely feliratkozik a másik osztály eseményére (`void CoolingSystem::handleTemperatureExceeded(int temperature)`). Az esemény bekövetkezésekor írja ki `qDebug` segítségével a "Hőmérséklet túllépte a küszöbértéket: °C!" üzenetet.
3. Hozzunk létre két osztályt: `MagicSlider` és `RewardBagDisplayer`. Az előző tartalmazzon egy `QSlider`t, az utóbbi pedig egy `QLCDNumber`t és ebből hozzunk majd létre több példányt is. A `RewardBagDisplayer` példányainkat iratkozassuk fel a slider `QSlider::valueChanged` eseményére. Amennyiben az kiváltódik, nézzük meg, hogy egyenlő-e a szám a displayer konstruktorában generált véletlen számmal (használjuk a `QRandomGenerator::bounded` függvényt a határérték generálására). Ha egyenlő, akkor állítsuk be ezt a számot a displayer értékének, és váltsunk ki egy `RewardBagDisplayer::rewardDisplayed` nevű saját eseményt. A `QMainWindow` ablakunkat iratkoztassuk fel minden `RewardBagDisplayer::rewardDisplayer` eseményre. Az esemény kiváltását használjuk fel arra, hogy megszámoljuk, hogy hány `RewardBagDisplayer` értékét találtuk ki. Amikor az összes `RewardBagDisplayer`-nek kitaláltuk az értékét, 2 másodperc múlva zárjuk be az ablakot egy `QTimer` segítségével.
4. (**Plusz pontra**) Implementálunk egy két személy által egymás ellen játszható (vagyis _local multiplayer_) [tic-tac-toe](https://hu.wikipedia.org/wiki/Tic-tac-toe) játékot (_kéthetes határidő, laboron be kell majd mutatni_).