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 uruchomicreturn 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/