niedziela, 8 sierpnia 2021

1 Podstawy

 alternatywa dla COUT

qInfo, qDebug, qCritical, qFatal


#include<QCoreApplication>
#include <QDebug>

main(int argc, char argv[])
{
QCoreApplicatio a(argc, argv);

qInfo() << "Info";

qDebug() << "Debug";

qCritical() << "Critic";

qFatal("Crash"); //wyjdzie z termianala i nie pozwoli ponownie uruchomic

return a.exec(); // ponownie uruchomi konsole terminala
}


Ternary  

wyrazenie ?  true : false


age > 0 && age <= 100 ? qInfo("You entered a valid age") : qFatal("You did not enter a valid age");


Nowa klasa



przy Tworzeniu nowej klasy c++ mozemy wybraz klase bazową Q po której dziedziczy
Widget/Mainwindows to desktopowe okienka
QuickItem to QML


MOC - meta object system
dzięki qObjects dostajemy MOC czyli dostęp do slotów sygnałów itp

#include <QObject> //dodaj

class Test : public QObject //dziedzicz
{
Q_OBJECT //makro
public:
explicit Test(QObject *parent = nullptr);

signals: //sygnały i sloty

public slots:

};


QObject parent child relationships

qt zarzadza za nas pamiecia, jesli obiekty dziedzicza po QObject (jak powyzszy Test)

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

Test *parent = new Test(&a); //Creating


return a.exec();
//a decontructed! //Tutaj usunie równiez obiekt typu Test czyli parent
}


To zostanie usunięty przy usuwaniu a (QcoreApplication)


QObject can not be copied

Powodem nie możliwości kopiowania QObjecr jest to, że mają ustanowiona komunikację za pomoca Sygnałów i Slotów. Kopiowanie nie ustalało by nowych połączeń.
Dlatego zwracanie pointera (zwykły tworzył by kopie)

//QObject getObject()
//{
// QObject o;
// return o; //return a copy NIEDOZWOLONE
//}

QObject* getObject()
{
QObject *o = new QObject(); //Warning, creating in the heap
return o;
}


QObject* p = getObject();

delete p; //ale wtedy trzeba pamietac, zeby samemu skasowac


dla QObject usuniety konstruktor kopiujacy, przenoszacy, przypisania wiec nie pozwala skopiowac



Signals & Slots

do komunikacji pomiędzy obiektami

nie mozesz wywoływać sygnałów bezpośrednio
slot moze byc wywoływany bezposrednio jak funkcja (jest normalna implementacja funkcji)

czemu uzywac ?
zamiast callbacków c++

jak?






.



http://hilite.me/