├── README.md ├── section 10 ├── qt6cb-10-1 │ ├── qt6cb-10-1.png │ └── qt6cb-10-1.xml ├── qt6cb-10-2 │ ├── qt6cb-10-2.png │ └── qt6cb-10-2.xml ├── qt6cb-10-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-10-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-10-5 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── test.cpp │ └── test.h ├── qt6cb-10-6 │ ├── CMakeLists.txt │ ├── animal.cpp │ ├── animal.h │ ├── main.cpp │ ├── test.cpp │ └── test.h ├── qt6cb-10-7 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-10-8 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-10-assign │ ├── CMakeLists.txt │ ├── calc.cpp │ ├── calc.h │ └── main.cpp ├── section 11 ├── qt6cb-11-1 │ ├── qt6cb-11-1.png │ └── qt6cb-11-1.xml ├── qt6cb-11-2 │ ├── qt6cb-11-2.png │ └── qt6cb-11-2.xml ├── qt6cb-11-3 │ ├── qt6cb-11-3.png │ └── qt6cb-11-3.xml ├── qt6cb-11-4 │ ├── CMakeLists.txt │ ├── destination.cpp │ ├── destination.h │ ├── main.cpp │ ├── source.cpp │ └── source.h ├── qt6cb-11-5 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── radio.cpp │ ├── radio.h │ ├── station.cpp │ └── station.h ├── qt6cb-11-6 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── test.cpp │ ├── test.h │ ├── watcher.cpp │ └── watcher.h ├── qt6cb-11-7 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── test.cpp │ └── test.h ├── qt6cb-11-8 │ ├── CMakeLists.txt │ ├── dog.cpp │ ├── dog.h │ ├── main.cpp │ ├── owner.cpp │ └── owner.h └── qt6cb-11-assign │ ├── CMakeLists.txt │ ├── main.cpp │ ├── monitor.cpp │ ├── monitor.h │ ├── test.cpp │ └── test.h ├── section 12 ├── qt6cb-12-1 │ ├── qt6cb-12-1.png │ └── qt6cb-12-1.xml ├── qt6cb-12-2 │ ├── qt6cb-12-2.png │ └── qt6cb-12-2.xml ├── qt6cb-12-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-12-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-12-5 │ ├── CMakeLists.txt │ ├── car.cpp │ ├── car.h │ ├── feline.cpp │ ├── feline.h │ ├── main.cpp │ ├── racecar.cpp │ └── racecar.h ├── qt6cb-12-6 │ ├── CMakeLists.txt │ ├── car.cpp │ ├── car.h │ ├── feline.cpp │ ├── feline.h │ ├── main.cpp │ ├── racecar.cpp │ └── racecar.h ├── qt6cb-12-7 │ ├── CMakeLists.txt │ ├── car.cpp │ ├── car.h │ ├── feline.cpp │ ├── feline.h │ ├── main.cpp │ ├── racecar.cpp │ └── racecar.h ├── qt6cb-12-8 │ ├── CMakeLists.txt │ ├── car.cpp │ ├── car.h │ ├── dog.cpp │ ├── dog.h │ ├── feline.cpp │ ├── feline.h │ ├── main.cpp │ ├── racecar.cpp │ └── racecar.h └── qt6cb-12-assign │ ├── CMakeLists.txt │ ├── consumer.cpp │ ├── consumer.h │ ├── main.cpp │ ├── producer.cpp │ └── producer.h ├── section 13 ├── qt6cb-13-1 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-13-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-13-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-13-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-13-5 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-13-6 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-13-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 14 ├── qt6cb-14-2 │ ├── qt6cb-14-2.png │ └── qt6cb-14-2.xml ├── qt6cb-14-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-14-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-14-5 │ ├── CMakeLists.txt │ ├── main.cpp │ └── test.h ├── qt6cb-14-6 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-14-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 15 ├── qt6cb-15-1 │ ├── CMakeLists.txt │ ├── cat.cpp │ ├── cat.h │ ├── dog.cpp │ ├── dog.h │ └── main.cpp ├── qt6cb-15-10 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── pet.cpp │ └── pet.h ├── qt6cb-15-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-5 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-6 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-7 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-8 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-15-9 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-15-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 2 ├── qt6cb-2-a-1 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-2-a-2 │ ├── CMakeLists.txt │ └── main.cpp └── qtcb-2-assign │ ├── qt6cb-2-a-1 │ ├── CMakeLists.txt │ └── main.cpp │ └── qt6cb-2-a-2 │ ├── CMakeLists.txt │ └── main.cpp ├── section 3 ├── qt6cb-3-1 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-3-2 │ ├── qt6cb-3-2-c │ │ ├── CMakeLists.txt │ │ └── main.cpp │ └── qt6cb-3-2-q │ │ ├── main.cpp │ │ └── qt6cb-3-2-q.pro ├── qt6cb-3-3 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-3-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 4 ├── qt6cb-4-1 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-10 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-5 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-6 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-7 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-8 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-4-9 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-4-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 5 ├── qt6cb-5-1 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-5-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-5-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-5-4 │ ├── CMakeLists.txt │ └── main.cpp └── qt6cb-5-assign │ ├── CMakeLists.txt │ └── main.cpp ├── section 6 ├── qt6cb-6-1 │ ├── Untitled Diagram.png │ └── qt6cb-6-1.xml ├── qt6cb-6-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-6-3 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-6-3.png │ └── qt6cb-6-3.xml ├── qt6cb-6-4 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-6-5 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-6-5.png │ └── qt6cb-6-5.xml ├── qt6cb-6-6 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-6-7 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-6-8 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-6-.png │ └── qt6cb-6.xml └── qt6cb-6-assign │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-6-assign.png │ └── qt6cb-6-assign.xml ├── section 7 ├── qt6cb-7-1 │ ├── qt6cb-7-1.png │ └── qt6cb-7-1.xml ├── qt6cb-7-2 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-7-3 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-7-4 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-7-4.png │ └── qt6cb-7-4.xml ├── qt6cb-7-5 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-7-6 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-7-6.png │ └── qt6cb-7-6.xml ├── qt6cb-7-7 │ ├── CMakeLists.txt │ └── main.cpp ├── qt6cb-7-8 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-7-8.png │ └── qt6cb-7-8.xml └── qt6cb-7-assign │ ├── CMakeLists.txt │ ├── main.cpp │ ├── qt6cb-7-assign.png │ └── qt6cb-7-assign.xml ├── section 8 ├── qt6cb-8-1 │ ├── qt6cb-8-1.png │ └── qt6cb-8-1.xml ├── qt6cb-8-2 │ ├── CMakeLists.txt │ ├── animal.cpp │ ├── animal.h │ └── main.cpp ├── qt6cb-8-3 │ ├── CMakeLists.txt │ ├── laptop.cpp │ ├── laptop.h │ └── main.cpp ├── qt6cb-8-4 │ ├── CMakeLists.txt │ ├── animal.cpp │ ├── animal.h │ ├── canine.cpp │ ├── canine.h │ ├── feline.cpp │ ├── feline.h │ ├── main.cpp │ ├── mammal.cpp │ ├── mammal.h │ ├── monster.cpp │ ├── monster.h │ ├── qt6cb-8-4.png │ └── qt6cb-8-4.xml ├── qt6cb-8-5 │ ├── CMakeLists.txt │ ├── Freezer.h │ ├── Microwave.h │ ├── Toaster.h │ ├── applicance.cpp │ ├── applicance.h │ ├── main.cpp │ ├── qt6cb-8-5.png │ └── qt6cb-8-5.xml ├── qt6cb-8-6 │ ├── CMakeLists.txt │ ├── feline.cpp │ ├── feline.h │ ├── lion.cpp │ ├── lion.h │ ├── main.cpp │ ├── qt6cb-8-6.png │ └── qt6cb-8-6.xml ├── qt6cb-8-7 │ ├── CMakeLists.txt │ ├── main.cpp │ ├── test.cpp │ └── test.h ├── qt6cb-8-8 │ ├── CMakeLists.txt │ ├── agecalc.cpp │ ├── agecalc.h │ └── main.cpp └── qt6cb-8-assign │ ├── CMakeLists.txt │ ├── cat.cpp │ ├── cat.h │ └── main.cpp └── section 9 ├── qt6cb-9-1 ├── qt6cb-9-1.png ├── qt6cb-9-1.xml └── readme.txt ├── qt6cb-9-2 ├── qt6cb-9-2.png ├── qt6cb-9-2.xml └── readme.txt ├── qt6cb-9-3 ├── qt6cb-9-3.png ├── qt6cb-9-3.xml └── readme.txt ├── qt6cb-9-4 └── readme.txt ├── qt6cb-9-5 ├── CMakeLists.txt └── main.cpp ├── qt6cb-9-6 ├── CMakeLists.txt ├── animal.cpp ├── animal.h └── main.cpp ├── qt6cb-9-7 ├── CMakeLists.txt └── main.cpp ├── qt6cb-9-8 ├── CMakeLists.txt ├── animal.cpp ├── animal.h └── main.cpp ├── qt6cb-9-9 ├── CMakeLists.txt ├── main.cpp ├── test.cpp └── test.h └── qt6cb-9-assign ├── CMakeLists.txt └── main.cpp /section 10/qt6cb-10-1/qt6cb-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 10/qt6cb-10-1/qt6cb-10-1.png -------------------------------------------------------------------------------- /section 10/qt6cb-10-1/qt6cb-10-1.xml: -------------------------------------------------------------------------------- 1 | 1Zdrb5swFIZ/DdI2aZIvDUm/lpV1mqZqYmo/u3ACrAYzxynQXz8TDMQ11VopyVoURfbry4HnPZw4Hg2K5qtkVfZDJMA9gpLGo188QjAixOs+KGl75QzjXkhlnphJkxDljzCsNOo2T2BjTVRCcJVXthiLsoRYWRqTUtT2tLXgdtSKpeAIUcy4q97micp6dbVAk34FeZoNkTEyIwUbJhthk7FE1HsSvfRoIIVQfatoAuAdvIFLvy58ZnS8MQmlesmCXzkk9/T22+PDTfnne0ra5Ob6s9nlgfGteeBIsfje3LFqBwxSbMsEup2QRy/qLFcQVSzuRmttvNYyVXDdw7q5zjkPBBdyt5YGu0vrJhZIBc2zD4FHNDqnQBSgZKunNHZatHa3nqwhgzXZni10aURm0iEdd56I6YaB9gqACweggo368PP67rdOx48HBYlQqK9OF6UyrwpZHAYstcFSFyw+nwHrH4vrcp7rp/cOlpy9kOzRMvZ8nqxHfFZ0mPrv984Zz5SG02YwdlP4CjQg4nMd+uJO6lbatUIJoOdFSkh4s4V3zMc3U3mpg9fkrEu4hNoV9UkFlAtcR9ZnC/g3bLap+gPHOm86g57SD0OkryHZTQBsJz9eHSj5qW+5M1dkdCzHnVE8fPavXmnPsWxAqzDcYT6FDasnxX7uZ/TEPrjl/j/5gLrqfxofiE/sYrU8og+6Ox3id2N7f4Xo5V8= -------------------------------------------------------------------------------- /section 10/qt6cb-10-2/qt6cb-10-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 10/qt6cb-10-2/qt6cb-10-2.png -------------------------------------------------------------------------------- /section 10/qt6cb-10-2/qt6cb-10-2.xml: -------------------------------------------------------------------------------- 1 | 1Zdrb5swFIZ/DdI2aZIvDUm/lpV1mqZqYmo/u3ACrAYzxynQXz8TDMQ11VopyVoURfbry4HnPZw4Hg2K5qtkVfZDJMA9gpLGo188QjAixOs+KGl75QzjXkhlnphJkxDljzCsNOo2T2BjTVRCcJVXthiLsoRYWRqTUtT2tLXgdtSKpeAIUcy4q97micp6dbVAk34FeZoNkTEyIwUbJhthk7FE1HsSvfRoIIVQfatoAuAdvIFLvy58ZnS8MQmlesmCXzkk9/T22+PDTfnne0ra5Ob6s9nlgfGteeBIsfje3LFqBwxSbMsEup2QRy/qLFcQVSzuRmttvNYyVXDdw7q5zjkPBBdyt5YGu0vrJhZIBc2zD4FHNDqnQBSgZKunNHZatHa3nqwhgzXZni10aURm0iEdd56I6YaB9gqACweggo368PP67rdOx48HBYlQqK9OF6UyrwpZHAYstcFSFyw+nwHrH4vrcp7rp/cOlpy9kOzRMvZ8nqxHfFZ0mPrv984Zz5SG02YwdlP4CjQg4nMd+uJO6lbatUIJoOdFSkh4s4V3zMc3U3mpg9fkrEu4hNoV9UkFlAtcR9ZnC/g3bLap+gPHOm86g57SD0OkryHZTQBsJz9eHSj5qW+5M1dkdCzHnVE8fPavXmnPsWxAqzDcYT6FDasnxX7uZ/TEPrjl/j/5gLrqfxofiE/sYrU8og+6Ox3id2N7f4Xo5V8= -------------------------------------------------------------------------------- /section 10/qt6cb-10-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-10-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Pointers vs copies 4 | 5 | Why 6 | Pointers are fast, and we get the actual object 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | void test(QString value) //Stack - COPY 16 | { 17 | qInfo() << &value << "Size:" << value.length(); 18 | } //Destrory 19 | 20 | void testPtr(QString *value) //Stack - Pointing 21 | { 22 | qInfo() << "P" << value << "Size:" << value->length(); 23 | qInfo() << "A" << &value << "Size:" << value->length(); 24 | } //Destrory 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | QCoreApplication a(argc, argv); 29 | 30 | QString name = "Bryan"; //Stack 31 | qInfo() << &name << "Size:" << name.length(); 32 | 33 | test(name); 34 | testPtr(&name); 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-10-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Pointer memory management 4 | 5 | Why 6 | Pointers are fast but we have to manage them 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | 17 | void display(QString *value) 18 | { 19 | qInfo() << "The pointer" << value; 20 | qInfo() << "The address" << &value; 21 | qInfo() << "The data" << *value; 22 | } 23 | 24 | int main(int argc, char *argv[]) 25 | { 26 | QCoreApplication a(argc, argv); 27 | 28 | QString name = "Bryan"; //Stack - C++ manages this 29 | QString *description = new QString("Hello pointer"); //Heap - We manages this 30 | 31 | //qInfo() << description; 32 | 33 | display(description); 34 | 35 | delete description; //No longer exists 36 | display(description); 37 | 38 | return a.exec(); 39 | } 40 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-5 18 | main.cpp 19 | test.h 20 | test.cpp 21 | ) 22 | target_link_libraries(qt6cb-10-5 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Automatic memory managment 4 | 5 | Why 6 | We want C++ to do it for us 7 | More advanced and we cover this in other courses 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include "test.h" 17 | 18 | void wow() 19 | { 20 | //Automatic memory management 21 | std::unique_ptr t(new Test()); //Created this in memory 22 | t->doStuff(); 23 | 24 | //pointer automatically deleted for us! 25 | } 26 | 27 | int main(int argc, char *argv[]) 28 | { 29 | QCoreApplication a(argc, argv); 30 | 31 | qInfo() << "Starting"; 32 | wow(); 33 | qInfo() << "Finished"; 34 | 35 | return a.exec(); 36 | } 37 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-5/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Constructor"; 6 | } 7 | 8 | Test::~Test() 9 | { 10 | qInfo() << this << "Deconstructor"; 11 | } 12 | 13 | void Test::doStuff() 14 | { 15 | qInfo() << this << Q_FUNC_INFO; 16 | } 17 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-5/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | #include 6 | 7 | class Test : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Test(QObject *parent = nullptr); 12 | ~Test(); 13 | 14 | void doStuff(); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // TEST_H 20 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-6 18 | main.cpp 19 | animal.h 20 | animal.cpp 21 | test.h 22 | test.cpp 23 | ) 24 | target_link_libraries(qt6cb-10-6 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/animal.cpp: -------------------------------------------------------------------------------- 1 | #include "animal.h" 2 | 3 | Animal::Animal(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Animal constructed"; 6 | } 7 | 8 | Animal::~Animal() 9 | { 10 | qInfo() << this << "Animal deconstructed"; 11 | } 12 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/animal.h: -------------------------------------------------------------------------------- 1 | #ifndef ANIMAL_H 2 | #define ANIMAL_H 3 | 4 | #include 5 | #include 6 | 7 | class Animal : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Animal(QObject *parent = nullptr); 12 | ~Animal(); 13 | signals: 14 | 15 | }; 16 | 17 | #endif // ANIMAL_H 18 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QObject parent child relationships 4 | 5 | Why 6 | We want Qt to manage it for us 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include "test.h" 16 | #include "animal.h" 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | Test *parent = new Test(&a); //Creating 23 | parent->dog = new Animal(parent); 24 | delete parent; //Deleting 25 | 26 | return a.exec(); 27 | //a decontructed! 28 | } 29 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Test constructed"; 6 | } 7 | 8 | Test::~Test() 9 | { 10 | qInfo() << this << "Test deconstructed"; 11 | } 12 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-6/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | #include 6 | #include "animal.h" 7 | 8 | class Test : public QObject 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Test(QObject *parent = nullptr); //Magic!!! 13 | ~Test(); 14 | 15 | Animal *dog; 16 | 17 | signals: 18 | 19 | }; 20 | 21 | #endif // TEST_H 22 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-10-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QObject can not be copied! 4 | 5 | Why 6 | Actually the memory address defines the object - Signals and slots 7 | Its common for a function to return a pointer! 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | void test(QObject object) //Copy 18 | { 19 | qInfo() << &object << Q_FUNC_INFO; 20 | } 21 | 22 | void testPtr(QObject *object) //Pointer 23 | { 24 | qInfo() << object << Q_FUNC_INFO; 25 | } 26 | 27 | //QObject getObject() 28 | //{ 29 | // QObject o; 30 | // return o; //return a copy 31 | //} 32 | 33 | QObject* getObject() 34 | { 35 | QObject *o = new QObject(); //Warning, creating in the heap 36 | return o; 37 | } 38 | 39 | int main(int argc, char *argv[]) 40 | { 41 | QCoreApplication a(argc, argv); 42 | 43 | QObject* p = getObject(); 44 | testPtr(p); 45 | 46 | delete p; 47 | 48 | return a.exec(); 49 | } 50 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-8 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-10-8 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Exploring Q_DISABLE_COPY 4 | 5 | Why 6 | We can and should look at Qts source 7 | 8 | How 9 | 10 | https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/kernel/qobject.h 11 | line 92 12 | Q_DISABLE_COPY(QObjectData) 13 | 14 | https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qglobal.h 15 | 16 | LINE 425 17 | Some classes do not permit copies to be made of an object. These 18 | classes contains a private copy constructor and assignment 19 | operator to disable copying (the compiler gives an error message). 20 | 21 | #define Q_DISABLE_COPY(Class) \ 22 | Class(const Class &) = delete;\ 23 | Class &operator=(const Class &) = delete; 24 | 25 | #define Q_DISABLE_MOVE(Class) \ 26 | Class(Class &&) = delete; \ 27 | Class &operator=(Class &&) = delete; 28 | 29 | #define Q_DISABLE_COPY_MOVE(Class) \ 30 | Q_DISABLE_COPY(Class) \ 31 | Q_DISABLE_MOVE(Class) 32 | 33 | */ 34 | #include 35 | 36 | QObject getObject() 37 | { 38 | QObject o; 39 | return o; 40 | } 41 | 42 | int main(int argc, char *argv[]) 43 | { 44 | QCoreApplication a(argc, argv); 45 | 46 | return a.exec(); 47 | } 48 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-10-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-10-assign 18 | main.cpp 19 | calc.h 20 | calc.cpp 21 | ) 22 | target_link_libraries(qt6cb-10-assign Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-assign/calc.cpp: -------------------------------------------------------------------------------- 1 | #include "calc.h" 2 | 3 | Calc::Calc(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "constructed"; 6 | } 7 | 8 | Calc::~Calc() 9 | { 10 | qInfo() << this << "deconstructed"; 11 | } 12 | 13 | int Calc::dogYears(int age) 14 | { 15 | return age * 7; 16 | } 17 | 18 | int Calc::catYears(int age) 19 | { 20 | return age * 9; 21 | } 22 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-assign/calc.h: -------------------------------------------------------------------------------- 1 | #ifndef CALC_H 2 | #define CALC_H 3 | 4 | #include 5 | #include 6 | 7 | class Calc : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Calc(QObject *parent = nullptr); 12 | ~Calc(); 13 | 14 | int dogYears(int age); 15 | int catYears(int age); 16 | signals: 17 | 18 | }; 19 | 20 | #endif // CALC_H 21 | -------------------------------------------------------------------------------- /section 10/qt6cb-10-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Working with pointers 4 | 5 | Why 6 | Qt / C++ uses a LOT of pointers 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | #include "calc.h" 16 | 17 | Calc* getCalc() 18 | { 19 | Calc *c = new Calc(); //Creating this on the heap 20 | return c; 21 | } 22 | 23 | int dogYears(int age, Calc *calc) 24 | { 25 | return calc->dogYears(age); 26 | } 27 | 28 | int catYears(int age, Calc *calc) 29 | { 30 | return calc->catYears(age); 31 | } 32 | 33 | int main(int argc, char *argv[]) 34 | { 35 | QCoreApplication a(argc, argv); 36 | 37 | Calc *c = getCalc(); 38 | qInfo() << "Enter your age:"; 39 | int age = 0; 40 | std::cin >> age; 41 | 42 | qInfo() << "Dog years:" << dogYears(age,c); 43 | qInfo() << "Cat years:" << catYears(age,c); 44 | 45 | 46 | delete c; 47 | 48 | return a.exec(); 49 | } 50 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-1/qt6cb-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 11/qt6cb-11-1/qt6cb-11-1.png -------------------------------------------------------------------------------- /section 11/qt6cb-11-1/qt6cb-11-1.xml: -------------------------------------------------------------------------------- 1 | vZXdjpswEIWfhstWgDdRr8sm3VatVIlK2b20YBZcGYaaIUCfvjbYAQsl25VWm4vI57PHP2c8JmBJNXxRvCl/YA4yiMN8CNh9EMf7Xaz/DRhnwO7YDAol8hlFC0jFX7AwtLQTObTeQEKUJBofZljXkJHHuFLY+8OeUfqrNryADUgzLrf0JHIqZ/ppFy78AURRupWj0PZU3A22oC15jv0KsUPAEoVIc6saEpDGO+fLHHe80nvZmIKa/ifg/DV9SJMnOh1/nbI/P8/f1D77ENv0tDS6E0OuDbASFZVYYM3lYaGfFXZ1DmbaUKtlzHfERsNIw99ANNps8o5Qo5IqaXthEPS4aj+ZqT7GOyvvBzv1JEYnalLj41qsw4xe4iblAucTmmNddc6iFjuVwQ273A3kqgC6Zeslv7ouACvQ+9FxCiQncfb3we0NLS7jliTqhs3jK3Jq5z1z2dmVWlHo9Gwy7eexLwVB2vDJgF4Xs5+zZyFlghLVFMuO+rffG441ueviVgZFMNw2e2uOezFsudj3Irqzul+qL3IlVa4qz8W9uZ3x1k6pa9bs4WhelK7OSGC9cfcFP33zfRevu/0GBjP2fg5ruTxwU9/qK8EO/wA= -------------------------------------------------------------------------------- /section 11/qt6cb-11-2/qt6cb-11-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 11/qt6cb-11-2/qt6cb-11-2.png -------------------------------------------------------------------------------- /section 11/qt6cb-11-2/qt6cb-11-2.xml: -------------------------------------------------------------------------------- 1 | vZXdjpswEIWfhstWgDdRr8sm3VatVIlK2b20YBZcGYaaIUCfvjbYAQsl25VWm4vI57PHP2c8JmBJNXxRvCl/YA4yiMN8CNh9EMf7Xaz/DRhnwO7YDAol8hlFC0jFX7AwtLQTObTeQEKUJBofZljXkJHHuFLY+8OeUfqrNryADUgzLrf0JHIqZ/ppFy78AURRupWj0PZU3A22oC15jv0KsUPAEoVIc6saEpDGO+fLHHe80nvZmIKa/ifg/DV9SJMnOh1/nbI/P8/f1D77ENv0tDS6E0OuDbASFZVYYM3lYaGfFXZ1DmbaUKtlzHfERsNIw99ANNps8o5Qo5IqaXthEPS4aj+ZqT7GOyvvBzv1JEYnalLj41qsw4xe4iblAucTmmNddc6iFjuVwQ273A3kqgC6Zeslv7ouACvQ+9FxCiQncfb3we0NLS7jliTqhs3jK3Jq5z1z2dmVWlHo9Gwy7eexLwVB2vDJgF4Xs5+zZyFlghLVFMuO+rffG441ueviVgZFMNw2e2uOezFsudj3Irqzul+qL3IlVa4qz8W9uZ3x1k6pa9bs4WhelK7OSGC9cfcFP33zfRevu/0GBjP2fg5ruTxwU9/qK8EO/wA= -------------------------------------------------------------------------------- /section 11/qt6cb-11-3/qt6cb-11-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 11/qt6cb-11-3/qt6cb-11-3.png -------------------------------------------------------------------------------- /section 11/qt6cb-11-3/qt6cb-11-3.xml: -------------------------------------------------------------------------------- 1 | vZXdjpswEIWfhstWgDdRr8sm3VatVIlK2b20YBZcGYaaIUCfvjbYAQsl25VWm4vI57PHP2c8JmBJNXxRvCl/YA4yiMN8CNh9EMf7Xaz/DRhnwO7YDAol8hlFC0jFX7AwtLQTObTeQEKUJBofZljXkJHHuFLY+8OeUfqrNryADUgzLrf0JHIqZ/ppFy78AURRupWj0PZU3A22oC15jv0KsUPAEoVIc6saEpDGO+fLHHe80nvZmIKa/ifg/DV9SJMnOh1/nbI/P8/f1D77ENv0tDS6E0OuDbASFZVYYM3lYaGfFXZ1DmbaUKtlzHfERsNIw99ANNps8o5Qo5IqaXthEPS4aj+ZqT7GOyvvBzv1JEYnalLj41qsw4xe4iblAucTmmNddc6iFjuVwQ273A3kqgC6Zeslv7ouACvQ+9FxCiQncfb3we0NLS7jliTqhs3jK3Jq5z1z2dmVWlHo9Gwy7eexLwVB2vDJgF4Xs5+zZyFlghLVFMuO+rffG441ueviVgZFMNw2e2uOezFsudj3Irqzul+qL3IlVa4qz8W9uZ3x1k6pa9bs4WhelK7OSGC9cfcFP33zfRevu/0GBjP2fg5ruTxwU9/qK8EO/wA= -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-4 18 | main.cpp 19 | source.h 20 | source.cpp 21 | destination.h 22 | destination.cpp 23 | ) 24 | target_link_libraries(qt6cb-11-4 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/destination.cpp: -------------------------------------------------------------------------------- 1 | #include "destination.h" 2 | 3 | Destination::Destination(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Destination::mySlot(QString message) 9 | { 10 | qInfo() << message; 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/destination.h: -------------------------------------------------------------------------------- 1 | #ifndef DESTINATION_H 2 | #define DESTINATION_H 3 | 4 | #include 5 | #include 6 | 7 | class Destination : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Destination(QObject *parent = nullptr); 12 | 13 | signals: 14 | void arrived(); 15 | 16 | public slots: 17 | void mySlot(QString message); 18 | 19 | }; 20 | 21 | #endif // DESTINATION_H 22 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Connecting 4 | 5 | Why 6 | We want to connect a signal to a slot 7 | 8 | How 9 | Use the connect function 10 | */ 11 | 12 | #include 13 | #include "source.h" 14 | #include "destination.h" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | Source oSource; 21 | Destination oDestination; 22 | 23 | QObject::connect(&oSource,&Source::mySignal,&oDestination,&Destination::mySlot); 24 | 25 | oSource.test(); 26 | oDestination.mySlot("HI!"); 27 | 28 | return a.exec(); 29 | } 30 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/source.cpp: -------------------------------------------------------------------------------- 1 | #include "source.h" 2 | 3 | Source::Source(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Source::test() 9 | { 10 | emit mySignal("Hello world!"); 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-4/source.h: -------------------------------------------------------------------------------- 1 | #ifndef SOURCE_H 2 | #define SOURCE_H 3 | 4 | #include 5 | 6 | class Source : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit Source(QObject *parent = nullptr); 11 | 12 | void test(); 13 | 14 | signals: 15 | void mySignal(QString message); 16 | }; 17 | 18 | #endif // SOURCE_H 19 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-5 18 | main.cpp 19 | radio.h 20 | radio.cpp 21 | station.h 22 | station.cpp 23 | ) 24 | target_link_libraries(qt6cb-11-5 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-5/radio.cpp: -------------------------------------------------------------------------------- 1 | #include "radio.h" 2 | 3 | Radio::Radio(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Radio::listen(int channel, QString name, QString message) 9 | { 10 | qInfo() << channel << " " << name << " - " << message; 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-5/radio.h: -------------------------------------------------------------------------------- 1 | #ifndef RADIO_H 2 | #define RADIO_H 3 | 4 | #include 5 | #include 6 | 7 | class Radio : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Radio(QObject *parent = nullptr); 12 | 13 | signals: 14 | void quit(); 15 | 16 | public slots: 17 | void listen(int channel,QString name, QString message); 18 | 19 | }; 20 | 21 | #endif // RADIO_H 22 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-5/station.cpp: -------------------------------------------------------------------------------- 1 | #include "station.h" 2 | 3 | Station::Station(QObject *parent, int channel, QString name) : QObject(parent) 4 | { 5 | this->channel = channel; 6 | this->name = name; 7 | } 8 | 9 | void Station::broadcast(QString message) 10 | { 11 | emit send(channel,name,message); 12 | } 13 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-5/station.h: -------------------------------------------------------------------------------- 1 | #ifndef STATION_H 2 | #define STATION_H 3 | 4 | #include 5 | #include 6 | 7 | class Station : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Station(QObject *parent = nullptr, int channel = 0, QString name = "unknown"); 12 | QString name; 13 | int channel; 14 | 15 | signals: 16 | void send(int channel,QString name, QString message); 17 | 18 | public slots: 19 | void broadcast(QString message); 20 | 21 | }; 22 | 23 | #endif // STATION_H 24 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-6 18 | main.cpp 19 | test.h 20 | test.cpp 21 | watcher.h 22 | watcher.cpp 23 | ) 24 | target_link_libraries(qt6cb-11-6 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Qt Propery System 4 | 5 | Why 6 | Used in more advanced applications with QML 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "test.h" 14 | #include "watcher.h" 15 | 16 | #include 17 | 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | Test tester; 24 | Watcher destination; 25 | 26 | QObject::connect(&tester,&Test::messageChanged,&destination,&Watcher::messageChanged); 27 | 28 | tester.setProperty("message",QVariant("Hello World")); 29 | tester.setMessage("testing"); 30 | 31 | 32 | return a.exec(); 33 | } 34 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | QString Test::message() const 9 | { 10 | return m_message; 11 | } 12 | 13 | void Test::setMessage(const QString &message) 14 | { 15 | m_message = message; 16 | emit messageChanged(m_message); 17 | } 18 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | 6 | class Test : public QObject 7 | { 8 | Q_OBJECT 9 | 10 | QString m_message; 11 | 12 | public: 13 | explicit Test(QObject *parent = nullptr); 14 | 15 | Q_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged) 16 | 17 | QString message() const; 18 | void setMessage(const QString &message); 19 | 20 | signals: 21 | void messageChanged(QString message); 22 | }; 23 | 24 | #endif // TEST_H 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/watcher.cpp: -------------------------------------------------------------------------------- 1 | #include "watcher.h" 2 | 3 | Watcher::Watcher(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Watcher::messageChanged(QString message) 9 | { 10 | qInfo() << message; 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-6/watcher.h: -------------------------------------------------------------------------------- 1 | #ifndef WATCHER_H 2 | #define WATCHER_H 3 | 4 | #include 5 | #include 6 | 7 | class Watcher : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Watcher(QObject *parent = nullptr); 12 | 13 | signals: 14 | 15 | public slots: 16 | void messageChanged(QString message); 17 | }; 18 | 19 | #endif // WATCHER_H 20 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-7 18 | main.cpp 19 | test.h 20 | test.cpp 21 | ) 22 | target_link_libraries(qt6cb-11-7 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Timer example 4 | 5 | Why 6 | Qt is filled with signals and slots 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "test.h" 14 | int main(int argc, char *argv[]) 15 | { 16 | QCoreApplication a(argc, argv); 17 | 18 | Test test; 19 | 20 | return a.exec(); 21 | } 22 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-7/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | count = 0; 6 | 7 | connect(&m_timer,&QTimer::timeout,this,&Test::timeout); 8 | m_timer.setInterval(1000); 9 | 10 | m_timer.start(); 11 | 12 | 13 | } 14 | 15 | void Test::timeout() 16 | { 17 | qInfo() << "Test!"; 18 | count++; 19 | if(count >= 3) 20 | { 21 | m_timer.stop(); 22 | qInfo() << "Done!"; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-7/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class Test : public QObject 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Test(QObject *parent = nullptr); 13 | 14 | signals: 15 | 16 | public slots: 17 | void timeout(); 18 | 19 | private: 20 | QTimer m_timer; 21 | int count; 22 | 23 | }; 24 | 25 | #endif // TEST_H 26 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-8 18 | main.cpp 19 | owner.h 20 | owner.cpp 21 | dog.h 22 | dog.cpp 23 | ) 24 | target_link_libraries(qt6cb-11-8 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/dog.cpp: -------------------------------------------------------------------------------- 1 | #include "dog.h" 2 | 3 | Dog::Dog(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Dog::treats() 9 | { 10 | qInfo() << "BARK!"; 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/dog.h: -------------------------------------------------------------------------------- 1 | #ifndef DOG_H 2 | #define DOG_H 3 | 4 | #include 5 | #include 6 | 7 | class Dog : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Dog(QObject *parent = nullptr); 12 | 13 | signals: 14 | 15 | public slots: 16 | void treats(); 17 | 18 | }; 19 | 20 | #endif // DOG_H 21 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Dog owner 4 | 5 | Why 6 | Show that we can easily goof up 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "owner.h" 14 | #include "dog.h" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | Owner owner; 21 | Dog dog; 22 | 23 | QObject::connect(&owner,&Owner::treats,&dog,&Dog::treats); //Auto 24 | 25 | //Somewhere else 26 | for(int i = 0; i < 10; i++) 27 | { 28 | QObject::connect(&owner,&Owner::treats,&dog,&Dog::treats,Qt::UniqueConnection); //Auto 29 | } 30 | 31 | owner.giveSnacks(); 32 | 33 | return a.exec(); 34 | } 35 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/owner.cpp: -------------------------------------------------------------------------------- 1 | #include "owner.h" 2 | 3 | Owner::Owner(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Owner::giveSnacks() 9 | { 10 | qInfo() << "Snacks are ready!"; 11 | emit treats(); 12 | } 13 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-8/owner.h: -------------------------------------------------------------------------------- 1 | #ifndef OWNER_H 2 | #define OWNER_H 3 | 4 | #include 5 | #include 6 | 7 | class Owner : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Owner(QObject *parent = nullptr); 12 | 13 | void giveSnacks(); 14 | 15 | signals: 16 | void treats(); 17 | 18 | }; 19 | 20 | #endif // OWNER_H 21 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-11-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-11-assign 18 | main.cpp 19 | test.h 20 | test.cpp 21 | monitor.cpp 22 | monitor.h 23 | ) 24 | target_link_libraries(qt6cb-11-assign Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Working with signals and slots 4 | 5 | Why 6 | Qt uses a LOT of signals and slot 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "test.h" 14 | #include "monitor.h" 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | Test obj; 22 | Monitor monitor; 23 | 24 | obj.connect(&obj,&Test::close,&monitor,&Monitor::closing); 25 | QObject::connect(&obj,&Test::close,&a,&QCoreApplication::quit, Qt::QueuedConnection); 26 | 27 | 28 | qInfo() << "Closing the application..."; 29 | obj.kill(); 30 | 31 | 32 | //return a.exec(); 33 | int value = a.exec(); 34 | 35 | qInfo() << "Exit code;" << value; 36 | return value; 37 | } 38 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/monitor.cpp: -------------------------------------------------------------------------------- 1 | #include "monitor.h" 2 | 3 | Monitor::Monitor(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Monitor::closing() 9 | { 10 | qInfo() << "Application is closing!"; 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/monitor.h: -------------------------------------------------------------------------------- 1 | #ifndef MONITOR_H 2 | #define MONITOR_H 3 | 4 | #include 5 | #include 6 | 7 | class Monitor : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Monitor(QObject *parent = nullptr); 12 | 13 | signals: 14 | 15 | public slots: 16 | void closing(); 17 | 18 | }; 19 | 20 | #endif // MONITOR_H 21 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Test::kill() 9 | { 10 | emit close(); 11 | } 12 | -------------------------------------------------------------------------------- /section 11/qt6cb-11-assign/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | 6 | class Test : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit Test(QObject *parent = nullptr); 11 | 12 | signals: 13 | void close(); 14 | 15 | public slots: 16 | void kill(); 17 | }; 18 | 19 | #endif // TEST_H 20 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-1/qt6cb-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 12/qt6cb-12-1/qt6cb-12-1.png -------------------------------------------------------------------------------- /section 12/qt6cb-12-1/qt6cb-12-1.xml: -------------------------------------------------------------------------------- 1 | tZQ9b4MwEEB/DWMkG5eGtaFJs1QdGNrVBRMsGQ45JkB+fU04ApRGStXCgHzPPn88n+ywIKtfNC/SV4iFclwS1w57dlx37bv234KmAw+UduCgZdyhEQjlWSAkSEsZi+NkoAFQRhZTGEGei8hMGNcaqumwBNR01YIfxAyEEVdz+i5jk3bU98jA90Ie0n5lSrAn4/1gBMeUx1CNENs6LNAApmtldSBU66730uXtbvReN6ZFbu5JALMqGx0zkpTnffj0mek3ueo1n7gq8cRJmUdGQo67Nk2vokqlEWHBozau7G07bJOaTNmI2iY/Ft0FJLIWds1NIpUKQIG+pDNCdvZrOeQmxGnxFCehjahvHoxeddkyE5AJoxs7BBO8NR4CS+wRw2q4L+ojS8d31UOONXK4Tj1otA00+RurdGaVfJCAELqbWbXT2Vq2weYf/FK6hN+p3rU31+v9pNdbTK93v96/SvWtVH8BqYx+s7pg0dpweGYufaO3mm2/AA== -------------------------------------------------------------------------------- /section 12/qt6cb-12-2/qt6cb-12-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 12/qt6cb-12-2/qt6cb-12-2.png -------------------------------------------------------------------------------- /section 12/qt6cb-12-2/qt6cb-12-2.xml: -------------------------------------------------------------------------------- 1 | tZQ9b4MwEEB/DWMkG5eGtaFJs1QdGNrVBRMsGQ45JkB+fU04ApRGStXCgHzPPn88n+ywIKtfNC/SV4iFclwS1w57dlx37bv234KmAw+UduCgZdyhEQjlWSAkSEsZi+NkoAFQRhZTGEGei8hMGNcaqumwBNR01YIfxAyEEVdz+i5jk3bU98jA90Ie0n5lSrAn4/1gBMeUx1CNENs6LNAApmtldSBU66730uXtbvReN6ZFbu5JALMqGx0zkpTnffj0mek3ueo1n7gq8cRJmUdGQo67Nk2vokqlEWHBozau7G07bJOaTNmI2iY/Ft0FJLIWds1NIpUKQIG+pDNCdvZrOeQmxGnxFCehjahvHoxeddkyE5AJoxs7BBO8NR4CS+wRw2q4L+ojS8d31UOONXK4Tj1otA00+RurdGaVfJCAELqbWbXT2Vq2weYf/FK6hN+p3rU31+v9pNdbTK93v96/SvWtVH8BqYx+s7pg0dpweGYufaO3mm2/AA== -------------------------------------------------------------------------------- /section 12/qt6cb-12-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-12-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Implicit conversion 4 | 5 | Why 6 | C++ will try to guess what we are doing 7 | Usually it does this poorly 8 | 9 | How 10 | See below 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | double value = 5.75; 21 | qInfo() << "Double:" << value; 22 | 23 | int age = value; 24 | qInfo() << "Int:" << age; //implicit conversion should not be trusted 25 | 26 | 27 | return a.exec(); 28 | } 29 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-12-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Explicit conversion 4 | 5 | Why 6 | We tell C++ what to do 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | double value = 5.75; 20 | qInfo() << "Double: " << value; 21 | 22 | int age = value; 23 | qInfo() << "Age: " << age; //Implicit conversion should not be trusted 24 | 25 | age = (int)value; //We control this conversion 26 | qInfo() << "Age: " << age; //Explicit conversion should be trusted 27 | 28 | return a.exec(); 29 | } 30 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-5 18 | main.cpp 19 | car.h 20 | car.cpp 21 | feline.h 22 | feline.cpp 23 | racecar.h 24 | racecar.cpp 25 | ) 26 | target_link_libraries(qt6cb-12-5 Qt${QT_VERSION_MAJOR}::Core) 27 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/car.cpp: -------------------------------------------------------------------------------- 1 | #include "car.h" 2 | 3 | Car::Car(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Car::drive() 9 | { 10 | qInfo() << "driving"; 11 | } 12 | 13 | void Car::stop() 14 | { 15 | qInfo() << "stopping"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/car.h: -------------------------------------------------------------------------------- 1 | #ifndef CAR_H 2 | #define CAR_H 3 | 4 | #include 5 | #include 6 | 7 | class Car : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Car(QObject *parent = nullptr); 12 | 13 | QString color = "white"; 14 | int tires = 4; 15 | void drive(); 16 | void stop(); 17 | 18 | signals: 19 | 20 | }; 21 | 22 | #endif // CAR_H 23 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Feline::meow() 9 | { 10 | qInfo() << "meow"; 11 | } 12 | 13 | void Feline::hiss() 14 | { 15 | qInfo() << "hiss"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | 7 | class Feline : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Feline(QObject *parent = nullptr); 12 | 13 | void meow(); 14 | void hiss(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // FELINE_H 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/racecar.cpp: -------------------------------------------------------------------------------- 1 | #include "racecar.h" 2 | 3 | RaceCar::RaceCar(QObject *parent) : Car(parent) 4 | { 5 | 6 | } 7 | 8 | void RaceCar::gofast() 9 | { 10 | qInfo() << "zooooooom"; 11 | } 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-5/racecar.h: -------------------------------------------------------------------------------- 1 | #ifndef RACECAR_H 2 | #define RACECAR_H 3 | 4 | #include 5 | #include 6 | #include "car.h" 7 | 8 | class RaceCar : public Car 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit RaceCar(QObject *parent = nullptr); 13 | bool supercharger = true; 14 | void gofast(); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // RACECAR_H 20 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-6 18 | main.cpp 19 | car.h 20 | car.cpp 21 | feline.h 22 | feline.cpp 23 | racecar.h 24 | racecar.cpp 25 | ) 26 | target_link_libraries(qt6cb-12-6 Qt${QT_VERSION_MAJOR}::Core) 27 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/car.cpp: -------------------------------------------------------------------------------- 1 | #include "car.h" 2 | 3 | Car::Car(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Car::drive() 9 | { 10 | qInfo() << "driving"; 11 | } 12 | 13 | void Car::stop() 14 | { 15 | qInfo() << "stopping"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/car.h: -------------------------------------------------------------------------------- 1 | #ifndef CAR_H 2 | #define CAR_H 3 | 4 | #include 5 | #include 6 | 7 | class Car : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Car(QObject *parent = nullptr); 12 | 13 | QString color = "white"; 14 | int tires = 4; 15 | void drive(); 16 | void stop(); 17 | 18 | signals: 19 | 20 | }; 21 | 22 | #endif // CAR_H 23 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Feline::meow() 9 | { 10 | qInfo() << "meow"; 11 | } 12 | 13 | void Feline::hiss() 14 | { 15 | qInfo() << "hiss"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | 7 | class Feline : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Feline(QObject *parent = nullptr); 12 | 13 | void meow(); 14 | void hiss(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // FELINE_H 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Static cast 4 | 5 | Why 6 | The static_cast operator performs a nonpolymorphic cast. 7 | For example, it can be used to cast a base class pointer into a derived class pointer. 8 | 9 | How 10 | use the connect function 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include "car.h" 17 | #include "racecar.h" 18 | #include "feline.h" 19 | 20 | void testDrive(Car* obj) 21 | { 22 | obj->drive(); 23 | obj->stop(); 24 | } 25 | 26 | void race(RaceCar* obj) 27 | { 28 | obj->drive(); 29 | obj->stop(); 30 | obj->gofast(); 31 | } 32 | 33 | int main(int argc, char *argv[]) 34 | { 35 | QCoreApplication a(argc, argv); 36 | 37 | Car* car = new Car(&a); 38 | qInfo() << car; 39 | race((RaceCar*)car); 40 | 41 | RaceCar* racer = static_cast(car); 42 | qInfo() << racer; 43 | if(racer) race(racer); 44 | 45 | // Feline* catcar = static_cast(racer); 46 | // qInfo() << racer; 47 | // if(racer) race(racer); 48 | 49 | 50 | return a.exec(); 51 | } 52 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/racecar.cpp: -------------------------------------------------------------------------------- 1 | #include "racecar.h" 2 | 3 | RaceCar::RaceCar(QObject *parent) : Car(parent) 4 | { 5 | 6 | } 7 | 8 | void RaceCar::gofast() 9 | { 10 | qInfo() << "zooooooom"; 11 | } 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-6/racecar.h: -------------------------------------------------------------------------------- 1 | #ifndef RACECAR_H 2 | #define RACECAR_H 3 | 4 | #include 5 | #include 6 | #include "car.h" 7 | 8 | class RaceCar : public Car 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit RaceCar(QObject *parent = nullptr); 13 | bool supercharger = true; 14 | void gofast(); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // RACECAR_H 20 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-7 18 | main.cpp 19 | car.h 20 | car.cpp 21 | feline.h 22 | feline.cpp 23 | racecar.h 24 | racecar.cpp 25 | ) 26 | target_link_libraries(qt6cb-12-7 Qt${QT_VERSION_MAJOR}::Core) 27 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/car.cpp: -------------------------------------------------------------------------------- 1 | #include "car.h" 2 | 3 | Car::Car(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Car::drive() 9 | { 10 | qInfo() << "driving"; 11 | } 12 | 13 | void Car::stop() 14 | { 15 | qInfo() << "stopping"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/car.h: -------------------------------------------------------------------------------- 1 | #ifndef CAR_H 2 | #define CAR_H 3 | 4 | #include 5 | #include 6 | 7 | class Car : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Car(QObject *parent = nullptr); 12 | 13 | QString color = "white"; 14 | int tires = 4; 15 | void drive(); 16 | void stop(); 17 | 18 | signals: 19 | 20 | }; 21 | 22 | #endif // CAR_H 23 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Feline::meow() 9 | { 10 | qInfo() << "meow"; 11 | } 12 | 13 | void Feline::hiss() 14 | { 15 | qInfo() << "hiss"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | 7 | class Feline : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Feline(QObject *parent = nullptr); 12 | 13 | void meow(); 14 | void hiss(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // FELINE_H 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/racecar.cpp: -------------------------------------------------------------------------------- 1 | #include "racecar.h" 2 | 3 | RaceCar::RaceCar(QObject *parent) : Car(parent) 4 | { 5 | 6 | } 7 | 8 | void RaceCar::gofast() 9 | { 10 | qInfo() << "zooooooom"; 11 | } 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-7/racecar.h: -------------------------------------------------------------------------------- 1 | #ifndef RACECAR_H 2 | #define RACECAR_H 3 | 4 | #include 5 | #include 6 | #include "car.h" 7 | 8 | class RaceCar : public Car 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit RaceCar(QObject *parent = nullptr); 13 | bool supercharger = true; 14 | void gofast(); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // RACECAR_H 20 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-8 18 | main.cpp 19 | car.h 20 | car.cpp 21 | feline.h 22 | feline.cpp 23 | racecar.h 24 | racecar.cpp 25 | dog.h 26 | dog.cpp 27 | ) 28 | target_link_libraries(qt6cb-12-8 Qt${QT_VERSION_MAJOR}::Core) 29 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/car.cpp: -------------------------------------------------------------------------------- 1 | #include "car.h" 2 | 3 | Car::Car(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Car::drive() 9 | { 10 | qInfo() << "driving"; 11 | } 12 | 13 | void Car::stop() 14 | { 15 | qInfo() << "stopping"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/car.h: -------------------------------------------------------------------------------- 1 | #ifndef CAR_H 2 | #define CAR_H 3 | 4 | #include 5 | #include 6 | 7 | class Car : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Car(QObject *parent = nullptr); 12 | 13 | QString color = "white"; 14 | int tires = 4; 15 | void drive(); 16 | void stop(); 17 | 18 | signals: 19 | 20 | }; 21 | 22 | #endif // CAR_H 23 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/dog.cpp: -------------------------------------------------------------------------------- 1 | #include "dog.h" 2 | 3 | Dog::Dog() 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/dog.h: -------------------------------------------------------------------------------- 1 | #ifndef DOG_H 2 | #define DOG_H 3 | 4 | 5 | class Dog 6 | { 7 | public: 8 | Dog(); 9 | }; 10 | 11 | #endif // DOG_H 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Feline::meow() 9 | { 10 | qInfo() << "meow"; 11 | } 12 | 13 | void Feline::hiss() 14 | { 15 | qInfo() << "hiss"; 16 | } 17 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | 7 | class Feline : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Feline(QObject *parent = nullptr); 12 | 13 | void meow(); 14 | void hiss(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // FELINE_H 21 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/racecar.cpp: -------------------------------------------------------------------------------- 1 | #include "racecar.h" 2 | 3 | RaceCar::RaceCar(QObject *parent) : Car(parent) 4 | { 5 | 6 | } 7 | 8 | void RaceCar::gofast() 9 | { 10 | qInfo() << "zooooooom"; 11 | } 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-8/racecar.h: -------------------------------------------------------------------------------- 1 | #ifndef RACECAR_H 2 | #define RACECAR_H 3 | 4 | #include 5 | #include 6 | #include "car.h" 7 | 8 | class RaceCar : public Car 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit RaceCar(QObject *parent = nullptr); 13 | bool supercharger = true; 14 | void gofast(); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // RACECAR_H 20 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-12-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-12-assign 18 | main.cpp 19 | producer.h 20 | producer.cpp 21 | consumer.h 22 | consumer.cpp 23 | ) 24 | target_link_libraries(qt6cb-12-assign Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/consumer.cpp: -------------------------------------------------------------------------------- 1 | #include "consumer.h" 2 | 3 | Consumer::Consumer(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Consumer::testing() 9 | { 10 | Producer* p = qobject_cast(sender()); 11 | if(!p) return; 12 | 13 | qInfo() << "Sender:" << p << p->objectName(); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/consumer.h: -------------------------------------------------------------------------------- 1 | #ifndef CONSUMER_H 2 | #define CONSUMER_H 3 | 4 | #include 5 | #include 6 | #include "producer.h" 7 | 8 | class Consumer : public QObject 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Consumer(QObject *parent = nullptr); 13 | 14 | 15 | signals: 16 | 17 | public slots: 18 | void testing(); 19 | 20 | }; 21 | 22 | #endif // CONSUMER_H 23 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QObject cast 4 | 5 | Why 6 | Learn how to get the sender of a signal 7 | 8 | How 9 | See below 10 | https://doc.qt.io/qt-6/qobject.html#sender 11 | */ 12 | 13 | #include 14 | #include 15 | #include "producer.h" 16 | #include "consumer.h" 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | Producer producer; 23 | Consumer consumer; 24 | 25 | QObject::connect(&producer,&Producer::test,&consumer,&Consumer::testing); 26 | 27 | producer.setObjectName("BabyShark"); 28 | 29 | producer.do_test(); 30 | 31 | 32 | return a.exec(); 33 | } 34 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/producer.cpp: -------------------------------------------------------------------------------- 1 | #include "producer.h" 2 | 3 | Producer::Producer(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Producer::do_test() 9 | { 10 | emit test(); 11 | } 12 | -------------------------------------------------------------------------------- /section 12/qt6cb-12-assign/producer.h: -------------------------------------------------------------------------------- 1 | #ifndef PRODUCER_H 2 | #define PRODUCER_H 3 | 4 | #include 5 | 6 | class Producer : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit Producer(QObject *parent = nullptr); 11 | 12 | void do_test(); 13 | 14 | signals: 15 | void test(); 16 | 17 | }; 18 | 19 | #endif // PRODUCER_H 20 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-1/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Errors vs exception 4 | 5 | Why 6 | Bad things happen, we need to know how to handle them 7 | 8 | How 9 | An Error 10 | "indicates serious problems that a reasonable 11 | application should not try to catch." - bad things 12 | 13 | An Exception 14 | "indicates conditions that a reasonable 15 | application might want to catch." - most things 16 | 17 | Warning people use these interchangeably 18 | 19 | */ 20 | 21 | #include 22 | #include 23 | #include 24 | 25 | using namespace std; 26 | 27 | int main(int argc, char *argv[]) 28 | { 29 | QCoreApplication a(argc, argv); 30 | 31 | do { 32 | 33 | int max = 44; 34 | int div = 0; 35 | 36 | qInfo() << "Enter a number to divide by (Or Zero for an issue!)"; 37 | cin >> div; 38 | 39 | int answer = max / div; //Possible Exception 40 | qInfo() << answer; 41 | 42 | } while (true); 43 | 44 | 45 | 46 | 47 | return a.exec(); 48 | } 49 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Throwing 4 | 5 | Why 6 | We want to tell the code a Exception occured 7 | 8 | How 9 | Use the throw keyword 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | bool doDiv(int max) 19 | { 20 | int value; 21 | qInfo() << "Enter a number"; 22 | cin >> value; 23 | 24 | if(value == 1) return false; 25 | 26 | //Taking control 27 | if(value == 0) 28 | { 29 | qInfo() << "ZERO - goodbye world"; 30 | //throw "Can not divide by zero"; 31 | throw QString("NOPE"); 32 | } 33 | 34 | int result = max / value; 35 | qInfo() << "Result = " << result; 36 | 37 | return true; 38 | } 39 | 40 | int main(int argc, char *argv[]) 41 | { 42 | QCoreApplication a(argc, argv); 43 | 44 | int max = 44; 45 | do 46 | { 47 | //Loop 48 | }while (doDiv(max)); 49 | 50 | qInfo() << "Finished"; 51 | 52 | return a.exec(); 53 | } 54 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | How Qt normaly deals with issues 4 | 5 | Why 6 | Exception safety 7 | https://en.wikipedia.org/wiki/Exception_safety 8 | 9 | How 10 | See below 11 | */ 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | bool doDivision(int max) { 20 | 21 | int value; 22 | qInfo() << "Enter a number"; 23 | cin >> value; 24 | 25 | if(value == 0) 26 | { 27 | qWarning() << "Can not be zero"; 28 | return false; 29 | } 30 | 31 | if(value > 5) 32 | { 33 | qWarning() << "Should be less than 5"; 34 | return false; 35 | } 36 | 37 | if(value == 1) 38 | { 39 | qWarning() << "Should be greater than 1"; 40 | return false; 41 | } 42 | 43 | 44 | int result = max / value; 45 | qInfo() << "Result = " << result; 46 | 47 | return true; 48 | } 49 | 50 | int main(int argc, char *argv[]) 51 | { 52 | QCoreApplication a(argc, argv); 53 | 54 | int max = 44; 55 | do { 56 | // Do something here 57 | } while(doDivision(max)); 58 | 59 | return a.exec(); 60 | } 61 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | C++ Standard handling 4 | 5 | Why 6 | While Qt is built on C++ it does not always follow the STD 7 | 8 | How 9 | std::exception 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | bool doDivision(int max) 19 | { 20 | 21 | try 22 | { 23 | int value; 24 | qInfo() << "Enter a number"; 25 | cin >> value; 26 | 27 | if(value == 0) throw std::invalid_argument("Can not divide by zero"); 28 | if(value > 5) throw std::out_of_range("Should be less than 5"); 29 | 30 | int result = max / value; 31 | qInfo() << "Result = " << result; 32 | 33 | return true; 34 | } 35 | catch (std::exception &e) 36 | { 37 | qWarning() << e.what(); 38 | return false; 39 | } 40 | } 41 | 42 | int main(int argc, char *argv[]) 43 | { 44 | QCoreApplication a(argc, argv); 45 | 46 | int max = 44; 47 | do { 48 | // Do something here 49 | } while(doDivision(max)); 50 | 51 | return a.exec(); 52 | } 53 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-13-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-13-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-13-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 13/qt6cb-13-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Try catch 4 | 5 | Why 6 | Practice basic exception handling 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | void test(int age) 16 | { 17 | //over 21 to be an adult 18 | try 19 | { 20 | if(age <= 0) throw QString("Not a valid age"); 21 | if(age < 21) throw QString("You are not an adult"); 22 | } 23 | catch (QString e) 24 | { 25 | qCritical() << e; 26 | return; 27 | } 28 | catch (...) 29 | { 30 | qCritical() << "Unknown Error"; 31 | return; 32 | } 33 | 34 | //Finally 35 | qInfo() << "You are" << age << "years old"; 36 | } 37 | 38 | int main(int argc, char *argv[]) 39 | { 40 | QCoreApplication a(argc, argv); 41 | 42 | test(13); 43 | test(45); 44 | test(-3); 45 | 46 | return a.exec(); 47 | } 48 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-2/qt6cb-14-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 14/qt6cb-14-2/qt6cb-14-2.png -------------------------------------------------------------------------------- /section 14/qt6cb-14-2/qt6cb-14-2.xml: -------------------------------------------------------------------------------- 1 | 7Zhdb5swFIZ/DdJ2sQljCPRy+Wh70d4skbb2zsMueDI4ckwD+/UzwXw4pG2mpiGJlouI89rH2K/9cBAWnCT5jUDL+J5jwizHxrkFp5bj+IGj/kuhqAQXgEqIBMWV1BHm9A/Roq3VjGKyMjpKzpmkS1MMeZqSUBoaEoKvzW5PnJl3XaKI9IR5iFhf/UGxjCs18OxWvyU0ius7A1u3JKjurIVVjDBfdyQ4s+BEcC6rqySfEFZ6V/tS5V2/0NpMTJBU7pOQ3d/4V3HqMvQ9KOJv09tHG33RozwjlukFI4w/LSxnsvispy2L2gvBsxSTcjjbguN1TCWZL1FYtq7V5istlglTEVCXTzyVc53bxNX2gqCMKWMTzrjYjA1t+1r9lK4nRIQk+YsrBY1/6twRnhApCtVFJwTacX3kwEjH63YDwZXW4s7m1RrSZyZqRm5tVRfa2X9w2XF6XhKsjpkOuZAxj3iK2KxVx6bbbZ87zpfa099EykKbijLJzR0gOZU/y/Svno4eOi3TXI+8CYo6SNV6qyTHq+OHbmObt4nqxO3trRZcrvL1TVSm8EyE5DX3NPZIRES+dZb7h0IQhiR9Nudx+C3ugUTVOt9PUJeYbaJMgkp+bPswBHkmQd4OgJwdAI0+DCB3UIA6+LQwvQWQQU+HpuMDBPcEKBgSINgD6I6uFEEjlJRcMDXx8aIJI9lYdKQCBQKFV3AYvNyRydfwBQoOwldbbPxTKTbuORQb96KKTXPUT6Xa+D17Mc9+KSvO1WF3y2G464Fz3ILunU5B98+vogf7PqXgkI+p4NI5AsHgHI3+c/QOjsC+r8b+kByB/rvxhYHk+B8Hkgrbj2ybts6XSjj7Cw== -------------------------------------------------------------------------------- /section 14/qt6cb-14-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-14-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-14-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-14-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Template example 4 | 5 | Why 6 | Templates are independent of any particular type. A template is a blueprint or formula 7 | for creating a template class or a function 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | template 18 | void print(T value) 19 | { 20 | qInfo() << value; 21 | } 22 | 23 | int main(int argc, char *argv[]) 24 | { 25 | QCoreApplication a(argc, argv); 26 | 27 | print(1); 28 | print(126.007); 29 | print(QString("Hello")); 30 | 31 | return a.exec(); 32 | } 33 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-14-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-14-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-14-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Template issues 4 | 5 | Why 6 | Lets look at how templates can fail 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | template 16 | T add(T valueT,F valueF) 17 | { 18 | return valueT + valueF; 19 | } 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | QCoreApplication a(argc, argv); 24 | 25 | qInfo() << add(1,4.6); 26 | qInfo() << add(55,true); 27 | qInfo() << add(true,55); 28 | qInfo() << add("Bryan",55); 29 | 30 | return a.exec(); 31 | } 32 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-14-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-14-5 18 | main.cpp 19 | test.h 20 | ) 21 | target_link_libraries(qt6cb-14-5 Qt${QT_VERSION_MAJOR}::Core) 22 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Templates and classes 4 | 5 | Why 6 | We can make classes templated 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include "test.h" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | Test intCalc; 21 | qInfo() << intCalc.add(1,4); 22 | 23 | Test dCalc; 24 | qInfo() << dCalc.add(6.09,3.04); 25 | 26 | Test sCalc; 27 | qInfo() << sCalc.add(QString("Hello"),QString("World")); 28 | 29 | 30 | return a.exec(); 31 | } 32 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-5/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | template 5 | class Test 6 | { 7 | public: 8 | 9 | T add(T value1, T value2){return value1 + value2;} 10 | }; 11 | 12 | #endif // TEST_H 13 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-14-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-14-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-14-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Templates QObject 4 | 5 | Why 6 | QObjects can NOT be copied 7 | Use pointers instead 8 | Note Qt template classes are not QObjects (QList for example) 9 | We cover those in detail in intermedate and advanced 10 | 11 | How 12 | See below 13 | */ 14 | 15 | #include 16 | #include 17 | 18 | template 19 | void display(T value) { 20 | qInfo() << value; 21 | } 22 | 23 | int main(int argc, char *argv[]) 24 | { 25 | QCoreApplication a(argc, argv); 26 | 27 | display(4); 28 | display(3.14); 29 | display(QString("Hello")); 30 | 31 | QObject obj; 32 | display(&obj); 33 | 34 | return a.exec(); 35 | } 36 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-14-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-14-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-14-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 14/qt6cb-14-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Templates 4 | 5 | Why 6 | See how to work 7 | See how they fail 8 | 9 | How 10 | See below 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | template 17 | T add(T a, T b) 18 | { 19 | return a + b; 20 | } 21 | 22 | int main(int argc, char *argv[]) 23 | { 24 | QCoreApplication a(argc, argv); 25 | 26 | qInfo() << add(1,2); 27 | qInfo() << add(QString("Hello"),"World"); 28 | QObject obj; 29 | 30 | //qInfo() << add(&obj,&obj); 31 | return a.exec(); 32 | } 33 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-1 18 | main.cpp 19 | cat.h 20 | cat.cpp 21 | dog.h 22 | dog.cpp 23 | ) 24 | target_link_libraries(qt6cb-15-1 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/cat.cpp: -------------------------------------------------------------------------------- 1 | #include "cat.h" 2 | 3 | Cat::Cat(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Cat::scared() 9 | { 10 | qInfo() << "Scared, running for my life"; 11 | emit run(); 12 | } 13 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/cat.h: -------------------------------------------------------------------------------- 1 | #ifndef CAT_H 2 | #define CAT_H 3 | 4 | #include 5 | #include 6 | 7 | class Cat : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Cat(QObject *parent = nullptr); 12 | 13 | signals: 14 | void run(); 15 | 16 | public slots: 17 | void scared(); 18 | 19 | }; 20 | 21 | #endif // CAT_H 22 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/dog.cpp: -------------------------------------------------------------------------------- 1 | #include "dog.h" 2 | 3 | Dog::Dog(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Dog::chase() 9 | { 10 | //if(!sender()) return; 11 | qInfo() << "Chasing" << sender(); 12 | } 13 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/dog.h: -------------------------------------------------------------------------------- 1 | #ifndef DOG_H 2 | #define DOG_H 3 | 4 | #include 5 | #include 6 | 7 | class Dog : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Dog(QObject *parent = nullptr); 12 | 13 | 14 | signals: 15 | void bark(); 16 | 17 | public slots: 18 | void chase(); 19 | 20 | private: 21 | 22 | }; 23 | 24 | #endif // DOG_H 25 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-1/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QObject 4 | 5 | Why 6 | Base class for everything Qt (non-template) 7 | We have talked about this a LOT 8 | 9 | How 10 | See below 11 | review Signals, Slots, MOC, macros 12 | */ 13 | 14 | #include 15 | #include 16 | #include "dog.h" 17 | #include "cat.h" 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | Cat cat; 24 | cat.setObjectName("Ghost"); 25 | 26 | Dog dog; 27 | dog.setObjectName("Fido"); 28 | 29 | //dog.chase(); //Zero for sender as nothing was emitted 30 | 31 | QObject::connect(&dog,&Dog::bark,&cat,&Cat::scared); 32 | QObject::connect(&cat,&Cat::run,&dog,&Dog::chase); 33 | 34 | emit dog.bark(); 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-10/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-10 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-10 18 | main.cpp 19 | pet.h 20 | pet.cpp 21 | ) 22 | target_link_libraries(qt6cb-15-10 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-10/pet.cpp: -------------------------------------------------------------------------------- 1 | #include "pet.h" 2 | 3 | int Pet::age() const 4 | { 5 | return m_age; 6 | } 7 | 8 | void Pet::setAge(int age) 9 | { 10 | m_age = age; 11 | } 12 | 13 | QString Pet::name() const 14 | { 15 | return m_name; 16 | } 17 | 18 | void Pet::setName(const QString &name) 19 | { 20 | m_name = name; 21 | } 22 | 23 | Pet::Pet(QObject *parent) : QObject(parent) 24 | { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-10/pet.h: -------------------------------------------------------------------------------- 1 | #ifndef PET_H 2 | #define PET_H 3 | 4 | #include 5 | 6 | class Pet : public QObject 7 | { 8 | Q_OBJECT 9 | 10 | int m_age; 11 | QString m_name; 12 | 13 | public: 14 | explicit Pet(QObject *parent = nullptr); 15 | 16 | 17 | int age() const; 18 | void setAge(int age); 19 | 20 | QString name() const; 21 | void setName(const QString &name); 22 | 23 | signals: 24 | 25 | }; 26 | 27 | #endif // PET_H 28 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Qt int types 4 | 5 | Why 6 | Make ints universal 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | //typedef - remake a type 20 | 21 | qint8 value8 = 0; 22 | qint16 value16 = 0; 23 | qint32 value32 = 0; 24 | qint64 value64 = 0; 25 | qintptr valueptr = 0; 26 | 27 | qInfo() << "value8" << sizeof(value8); 28 | qInfo() << "value16" << sizeof(value16); 29 | qInfo() << "value32" << sizeof(value32); 30 | qInfo() << "value64" << sizeof(value64); 31 | qInfo() << "valueptr" << sizeof(valueptr); 32 | 33 | return a.exec(); 34 | } 35 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QString 4 | 5 | Why 6 | Qts universal string class 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | void test(QString name) //COPY 16 | { 17 | qInfo() << name; 18 | } 19 | 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | QCoreApplication a(argc, argv); 24 | 25 | QString name = "Bryan Cairns"; 26 | qInfo() << name; 27 | qInfo() << name.mid(1,3); 28 | qInfo() << name.insert(0,"Mr. "); 29 | qInfo() << name.split(" "); 30 | 31 | int index = name.indexOf(" "); 32 | if(index > -1) 33 | { 34 | qInfo() << name.remove(0, index).trimmed(); 35 | } 36 | 37 | QString title = "Teacher"; 38 | QString full = name.trimmed() + " " + title; 39 | qInfo() << full; 40 | 41 | qInfo() << full.toUtf8(); 42 | 43 | test(full); 44 | 45 | return a.exec(); 46 | } 47 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QByteArray 4 | 5 | Why 6 | Must have class for working with data 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | QString greeting = "Hello World!"; 20 | QByteArray buffer(greeting.toUtf8()); 21 | buffer.append("!"); 22 | qInfo() << buffer; 23 | 24 | qInfo() << buffer.rightJustified(20,'.'); 25 | qInfo() << buffer.at(buffer.length() - 1); 26 | 27 | QString modified(buffer); 28 | qInfo() << modified; 29 | 30 | //Basic encoding and decoding 31 | qInfo() << buffer.toBase64(); 32 | qInfo() << buffer.toHex(); 33 | 34 | 35 | return a.exec(); 36 | } 37 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QVariant 4 | 5 | Why 6 | Variant and unknown types - basic part of the meta system 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | void test(QVariant value) //Copy 17 | { 18 | qInfo() << value; 19 | 20 | int i = 0; 21 | bool ok = false; 22 | i = value.toInt(&ok); 23 | if(ok) 24 | { 25 | qInfo() << "INT" << i; 26 | } 27 | else 28 | { 29 | qInfo() << "Not a int!"; 30 | } 31 | } 32 | 33 | int main(int argc, char *argv[]) 34 | { 35 | QCoreApplication a(argc, argv); 36 | 37 | QVariant value = 1; 38 | QVariant value2 = "Hello World"; 39 | 40 | test(value); 41 | test(value2); 42 | 43 | return a.exec(); 44 | } 45 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QStringList 4 | 5 | Why 6 | Lists of strings 7 | These are not arrays! 8 | 9 | How 10 | See below 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | QString data = "Hello world how are you"; 21 | QStringList lst = data.split(" "); 22 | qInfo() << lst; 23 | 24 | foreach(QString str,lst) 25 | { 26 | qInfo() << str; 27 | } 28 | 29 | lst.sort(Qt::CaseInsensitive); 30 | qInfo() << lst; 31 | 32 | QString myvar = "Hello"; 33 | if(lst.contains(myvar)) 34 | { 35 | int index = lst.indexOf(myvar); 36 | qInfo() << lst.value(index); 37 | } 38 | 39 | return a.exec(); 40 | } 41 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-8 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-8 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QList 4 | 5 | Why 6 | Templated container class 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | QString data = "Hello world how are you"; 20 | QList list = data.split(" "); 21 | 22 | foreach(QString word, list) 23 | { 24 | qInfo() << word; 25 | } 26 | 27 | QList age({44,56,21,13}); 28 | age.append(99); 29 | age.remove(1); 30 | qInfo() << age; 31 | 32 | foreach(int word, age) 33 | { 34 | qInfo() << word; 35 | } 36 | 37 | return a.exec(); 38 | } 39 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-9/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-9 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-9 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-9 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-9/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QVector 4 | 5 | Why 6 | QVector is an alias for QList. 7 | In Qt 5 this used to be a different class 8 | Now QVector and QList are the same class 9 | 10 | How 11 | See below 12 | */ 13 | 14 | #include 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | QString data = "Hello world how are you"; 22 | QVector list = data.split(" "); 23 | 24 | foreach(QString word, list) { 25 | qInfo() << word; 26 | } 27 | 28 | QVector ages({44,56,21,13}); 29 | foreach(int age, ages) { 30 | qInfo() << age; 31 | } 32 | 33 | return a.exec(); 34 | } 35 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-15-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-15-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-15-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 15/qt6cb-15-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QList! 4 | 5 | Why 6 | Arrays suck 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | QList ages; 22 | 23 | do 24 | { 25 | int age; 26 | qInfo() << "Enter an age"; 27 | std::cin >> age; 28 | if(!age) break; 29 | ages.append(age); 30 | }while(true); 31 | 32 | qInfo() << "You entered..."; 33 | foreach(int age, ages) 34 | { 35 | qInfo() << age; 36 | } 37 | qInfo() << "Finished"; 38 | 39 | 40 | return a.exec(); 41 | } 42 | -------------------------------------------------------------------------------- /section 2/qt6cb-2-a-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-2-a-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-2-a-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-2-a-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 2/qt6cb-2-a-1/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int argc, char *argv[]) 4 | { 5 | QCoreApplication a(argc, argv); 6 | 7 | return a.exec(); 8 | } 9 | -------------------------------------------------------------------------------- /section 2/qt6cb-2-a-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(qt6cb-2-a-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_CXX_STANDARD 11) 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 7 | 8 | add_executable(qt6cb-2-a-2 main.cpp) 9 | -------------------------------------------------------------------------------- /section 2/qt6cb-2-a-2/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() 6 | { 7 | cout << "Hello World!" << endl; 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /section 2/qtcb-2-assign/qt6cb-2-a-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-2-a-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-2-a-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-2-a-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 2/qtcb-2-assign/qt6cb-2-a-1/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int argc, char *argv[]) 4 | { 5 | QCoreApplication a(argc, argv); 6 | 7 | return a.exec(); 8 | } 9 | -------------------------------------------------------------------------------- /section 2/qtcb-2-assign/qt6cb-2-a-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(qt6cb-2-a-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_CXX_STANDARD 11) 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 7 | 8 | add_executable(qt6cb-2-a-2 main.cpp) 9 | -------------------------------------------------------------------------------- /section 2/qtcb-2-assign/qt6cb-2-a-2/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() 6 | { 7 | cout << "Hello World!" << endl; 8 | return 0; 9 | } 10 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-3-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-3-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-3-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-1/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Hello World 4 | 5 | Why 6 | This is the starting point in just about every language. 7 | Teaches you what a basic application looks like. 8 | 9 | How 10 | Main function 11 | Includes 12 | QCoreAppliction and exec 13 | CMake 14 | CMake Modules 15 | */ 16 | 17 | #include 18 | #include 19 | 20 | int main(int argc, char *argv[]) 21 | { 22 | QCoreApplication a(argc, argv); 23 | 24 | qInfo() << "Hello World"; 25 | 26 | return a.exec(); 27 | } 28 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-2/qt6cb-3-2-c/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-3-2-c LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-3-2-c 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-3-2-c Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-2/qt6cb-3-2-c/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | The build process 4 | 5 | Why 6 | Qt handles the build process a bit differently 7 | 8 | How 9 | Build the hello world app and look at the build process 10 | Do this for CMake and QMake 11 | Talk about the differences between CMake and QMake 12 | */ 13 | 14 | 15 | #include 16 | #include 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | qInfo() << "Hello world"; 23 | 24 | return a.exec(); 25 | } 26 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-2/qt6cb-3-2-q/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | The build process 4 | 5 | Why 6 | Qt handles the build process a bit differently 7 | 8 | How 9 | Build the hello world app and look at the build process 10 | Do this for CMake and QMake 11 | Talk about the differences between CMake and QMake 12 | */ 13 | 14 | 15 | #include 16 | #include 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | qInfo() << "Hello world"; 23 | 24 | return a.exec(); 25 | } 26 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-2/qt6cb-3-2-q/qt6cb-3-2-q.pro: -------------------------------------------------------------------------------- 1 | QT -= gui 2 | 3 | CONFIG += c++11 console 4 | CONFIG -= app_bundle 5 | 6 | # You can make your code fail to compile if it uses deprecated APIs. 7 | # In order to do so, uncomment the following line. 8 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 9 | 10 | SOURCES += \ 11 | main.cpp 12 | 13 | # Default rules for deployment. 14 | qnx: target.path = /tmp/$${TARGET}/bin 15 | else: unix:!android: target.path = /opt/$${TARGET}/bin 16 | !isEmpty(target.path): INSTALLS += target 17 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-3-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-3-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-3-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Comments 4 | 5 | Why 6 | Notes for you and other programmers 7 | 8 | How 9 | We have been using them :) 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | /*! 17 | Documentation for automated systems like Doxygen 18 | https://www.doxygen.nl/index.html 19 | * @brief main The starting point 20 | * @param argc The argument count 21 | * @param argv The arguuments 22 | * @return int The exit value of the application 23 | */ 24 | int main(int argc, char *argv[]) 25 | { 26 | QCoreApplication a(argc, argv); 27 | 28 | /* 29 | * This is a multi-line 30 | * comment 31 | * see isn't this cool! 32 | */ 33 | 34 | //This is how we print hello world 35 | qInfo() << "Hello World"; 36 | 37 | return a.exec(); 38 | } 39 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-3-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-3-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-3-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 3/qt6cb-3-assign/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QCoreApplication a(argc, argv); 7 | 8 | qInfo() << "Hello my name is Bryan"; 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-1/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Variables 4 | 5 | Why 6 | A variable is something that will change 7 | 8 | How 9 | type name = value 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | //Variables are something that will change 20 | bool LightSwitch = false; 21 | 22 | qInfo() << "Is on:" << LightSwitch; 23 | 24 | LightSwitch = true; 25 | qInfo() << "Is on:" << LightSwitch; 26 | 27 | return a.exec(); 28 | } 29 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-10/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-10 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-10 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-10 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-10/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Logical Operators 4 | 5 | Why 6 | We want to make logical comparisons 7 | 8 | How 9 | See below 10 | 11 | https://www.w3schools.com/cpp/cpp_operators_logical.asp 12 | */ 13 | 14 | 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | int x = 10; 22 | 23 | qInfo() << "x between 5 and 20" << (x > 5 && x < 20); 24 | qInfo() << "x greater than 20, greater than 8" << (x > 20 || x > 8); 25 | qInfo() << "x not equal 10" << !(x != 10); 26 | qInfo() << "Complex" << ((x > 11 && x < 20) || x == 10); 27 | 28 | return a.exec(); 29 | } 30 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Data types 4 | 5 | Why 6 | We need to tell C++ what type of thing we are working with 7 | 8 | How 9 | define the type 10 | 11 | https://www.w3schools.com/cpp/cpp_data_types.asp 12 | https://www.geeksforgeeks.org/c-data-types/ 13 | 14 | */ 15 | 16 | #include 17 | #include 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | int age = 44; 24 | double height = 6.02; 25 | 26 | qInfo() << "Age:" << age; 27 | qInfo() << "Height:" << height; 28 | 29 | age = 44.90; 30 | qInfo() << "Age:" << age; 31 | 32 | signed int dogs = -1; 33 | qInfo() << "Dogs:" << dogs; 34 | dogs = 15; 35 | qInfo() << "Dogs:" << dogs; 36 | 37 | unsigned int cats = -1; 38 | qInfo() << "Cats:" << cats; 39 | cats = 15; 40 | qInfo() << "Cats:" << cats; 41 | 42 | qInfo() << sizeof(dogs); 43 | qInfo() << sizeof(cats); 44 | qInfo() << sizeof(height); 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | return a.exec(); 53 | } 54 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Constants 4 | 5 | Why 6 | Sometimes we want to work with a value, but never change it 7 | 8 | How 9 | Use the const keyword, define the type, set a value 10 | 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | int age = 44; //can change 21 | const int id = 215; //can not change 22 | 23 | //id = 12; 24 | qInfo() << "Id:" << id; 25 | 26 | return a.exec(); 27 | } 28 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Enums 4 | 5 | Why 6 | Need to represent a set of data 7 | 8 | How 9 | use the enum keyword 10 | Enums represent value 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | // int red = 0; 22 | // int green = 1; 23 | // int blue = 3467; 24 | 25 | enum Color {red = 100,green = 55,blue = 256}; 26 | 27 | Color mycolor = Color::red; 28 | 29 | qInfo() << "Color" << mycolor; 30 | 31 | return a.exec(); 32 | } 33 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Structs 4 | 5 | Why 6 | Need to represent data structure 7 | 8 | How 9 | use the struct keyword 10 | Structs represent user-defined data type available 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | enum Colors {black,red,green,blue}; 18 | 19 | //Precursor to classes 20 | struct product 21 | { 22 | int weight; 23 | double value; 24 | Colors color; 25 | }; 26 | 27 | int main(int argc, char *argv[]) 28 | { 29 | QCoreApplication a(argc, argv); 30 | 31 | product laptop; //No assignment! 32 | qInfo() << "Size" << sizeof (laptop); 33 | 34 | laptop.color = Colors::green; 35 | laptop.value = 540.87; 36 | laptop.weight = 3; 37 | 38 | qInfo() << "Weight:" << laptop.weight; 39 | qInfo() << "Value:" << laptop.value; 40 | qInfo() << "Color:" << laptop.color; 41 | //qInfo() << "Laptop:" << laptop; 42 | 43 | 44 | return a.exec(); 45 | } 46 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Arrays 4 | 5 | Why 6 | Multiple values inside one variable 7 | 8 | How 9 | Array example below 10 | Pros - easy 11 | Cons - No range checking 12 | */ 13 | 14 | #include 15 | #include 16 | 17 | #include 18 | using namespace std; 19 | 20 | int main(int argc, char *argv[]) 21 | { 22 | QCoreApplication a(argc, argv); 23 | 24 | //Zero based index array 25 | int ages[4] = {23,7,34,1000}; 26 | ages[2] = 99; 27 | qInfo() << ages[0]; 28 | qInfo() << ages[1]; 29 | qInfo() << ages[2]; 30 | qInfo() << ages[3]; 31 | qInfo() << ages; 32 | 33 | array cars; 34 | cars[0] = 5; 35 | cars[1] = 67; 36 | cars[2] = 99; 37 | cars[3] = 238; 38 | cars[4] = 56; 39 | qInfo() << cars[0]; 40 | qInfo() << cars[1]; 41 | qInfo() << cars[2]; 42 | qInfo() << cars[3]; 43 | qInfo() << cars[4]; 44 | //qInfo() << cars; 45 | 46 | qInfo() << "Size:" << cars.size(); 47 | qInfo() << "SizeOf:" << sizeof (cars); 48 | qInfo() << "Last:" << cars[cars.size() -1]; 49 | 50 | return a.exec(); 51 | } 52 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Arithmetic Operators 4 | 5 | Why 6 | We perform math 7 | 8 | How 9 | See below 10 | 11 | https://www.w3schools.com/cpp/cpp_operators.asp#arithmetic 12 | */ 13 | 14 | 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | int age; //no assignment 22 | qInfo() << age; 23 | 24 | age = 21; //assign 25 | qInfo() << age; 26 | 27 | age++; //increment 28 | qInfo() << age; 29 | 30 | age--; //decrement 31 | qInfo() << age; 32 | 33 | int older = age * 5; //assignment + multiply 34 | qInfo() << older; 35 | 36 | int younger = older / 3; //assignment + divide 37 | qInfo() << younger; 38 | 39 | 40 | 41 | return a.exec(); 42 | } 43 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-8 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-8 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Assignment operators 4 | 5 | Why 6 | We want to assign values 7 | 8 | How 9 | See below 10 | https://www.w3schools.com/cpp/cpp_operators_assignment.asp 11 | 12 | */ 13 | 14 | #include 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | int value = 15; //assign 21 | qInfo() << value; 22 | 23 | value += 10; //add 10 24 | qInfo() << value; 25 | 26 | value -= 30; //subtract 30 27 | qInfo() << value; 28 | 29 | value *= 20; //multiply 10 30 | qInfo() << value; 31 | 32 | value /= 25; //divide 25 33 | qInfo() << value; 34 | 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-9/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-9 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-9 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-9 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-9/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Comparison operators 4 | 5 | Why 6 | We want to compair things 7 | 8 | How 9 | See below 10 | Compairson operators 11 | https://www.w3schools.com/cpp/cpp_operators_comparison.asp 12 | 13 | */ 14 | 15 | #include 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | int x = 10; 22 | int y = 15; 23 | 24 | qInfo() << "x == y" << (x == y); 25 | qInfo() << "x != y" << (x != y); 26 | qInfo() << "x <= y" << (x <= y); 27 | qInfo() << "x >= y" << (x >= y); 28 | qInfo() << "x < y" << (x < y); 29 | qInfo() << "x > y" << (x > y); 30 | 31 | return a.exec(); 32 | } 33 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-4-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-4-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-4-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 4/qt6cb-4-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Playing with data types 4 | 5 | Why 6 | Getting used to data types 7 | 8 | How 9 | Dog years 10 | Cat years 11 | Fish years 12 | */ 13 | 14 | 15 | #include 16 | #include 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | const int dog_years = 7; 23 | const int cat_years = 5; 24 | const int fish_years = 18; 25 | 26 | int my_age = 46; 27 | 28 | int dog_age = dog_years * my_age; 29 | int cat_age = cat_years * my_age; 30 | int fish_age = fish_years * my_age; 31 | 32 | qInfo() << "Human age:" << my_age; 33 | qInfo() << "Dog age:" << dog_age; 34 | qInfo() << "Cat age:" << cat_age; 35 | qInfo() << "Fish age:" << fish_age; 36 | 37 | return a.exec(); 38 | } 39 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-1/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-5-1 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-5-1 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-5-1 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-1/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | cout 4 | 5 | Why 6 | C++ normal means of outputting to the console 7 | 8 | How 9 | Use the STD namespace and cout 10 | Main point is you can mix Qt and C++ STD 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | using namespace std; 19 | 20 | int main(int argc, char *argv[]) 21 | { 22 | QCoreApplication a(argc, argv); 23 | 24 | //C++ way 25 | cout << "Hello" << endl; 26 | 27 | //Qt way 28 | qInfo() << "Hello"; 29 | 30 | int age = 44; 31 | cout << age; 32 | cout << endl; 33 | cout << flush; 34 | 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-5-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-5-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-5-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | cin 4 | 5 | Why 6 | C++ normal means of inputting to the console 7 | 8 | How 9 | Use the STD namespace and cin 10 | Main point is you can mix Qt and C++ STD 11 | */ 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | int age = 0; 24 | qInfo() << "Please enter an age:"; 25 | cin >> age; 26 | qInfo() << "You entered:" << age; 27 | 28 | return a.exec(); 29 | } 30 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-5-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-5-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-5-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Standard error 4 | 5 | Why 6 | C++ standard way of outputting an error 7 | 8 | How 9 | Use cerr 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | //C++ standard out 23 | cout << "Standard out" << endl; 24 | 25 | //C++ standard err 26 | cerr << "Standard error" << endl; 27 | 28 | 29 | return a.exec(); 30 | } 31 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6-5-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6-5-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6-5-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | QDebug vs cout 4 | 5 | Why 6 | Qt provides a more organized way to output messages 7 | 8 | How 9 | May want to organize the messages 10 | Can capture the messages (covered in the advanced course) 11 | https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler 12 | */ 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | using namespace std; 19 | 20 | int main(int argc, char *argv[]) 21 | { 22 | QCoreApplication a(argc, argv); 23 | 24 | int age = 0; 25 | qInfo() << "Enter your age:"; 26 | cin >> age; 27 | 28 | qInfo() << "You are" << age << "years old"; 29 | 30 | qInfo() << "Information"; 31 | qDebug() << "Debug"; 32 | qWarning() << "Warning"; 33 | qCritical() << "Critical"; 34 | qFatal("Test Crash !!!!"); 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-5-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-5-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-5-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 5/qt6cb-5-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Get user info (name and age) 4 | 5 | Why 6 | Practice what you have learned 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | string name; 23 | int age; 24 | 25 | cout << "Enter your name:" << endl; 26 | cin >> name; 27 | 28 | cout << "Enter your age:" << endl; 29 | cin >> age; 30 | 31 | qInfo() << name.c_str() << "is" << age << "years old"; 32 | 33 | return a.exec(); 34 | } 35 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-1/Untitled Diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 6/qt6cb-6-1/Untitled Diagram.png -------------------------------------------------------------------------------- /section 6/qt6cb-6-1/qt6cb-6-1.xml: -------------------------------------------------------------------------------- 1 | 5Zhdk5owFIZ/jZedCQQVb5fKttOP6dSL9m4nK0dIJ3CYEBT76xskiDS7lnaWMrVeOMmbhCRP3hOPzGiQVveS5ckHjEDMXBJVM/p65rpL39XftXBsBDqnjRBLHjWS0wkb/h2MSIxa8giKXkeFKBTP++IWswy2qqcxKfHQ77ZD0Z81ZzFYwmbLhK1+4ZFKGtWfk05/AzxO2pkdYlpS1nY2QpGwCA8XEl3PaCARVVNKqwBEza7l0owLn2k9L0xCpoYMuJd33oP8+Dn6Gix23sM7fNzzV/PmKXsmSrNhs1h1bAlApIGYKkqVYIwZE+tOvZNYZhHU0xBd6/q8R8y16GjxGyh1NKfLSoVaSlQqTGszZz3Rs3szUoGl3MKVDbUeYTIGdaUfPZ+Adi5gCkoe9TgJgim+76+DGQ/F534dZl0wpH+DumNR3+gFKwt9H+wh4Qo2OTvt/6CjrQ9xx4UIUKA8jaWEBAEhZ7h7kAqq63htHGYA9YyHTRC3lj50EeG0WnIRDQsyEkDXArjOohfFF4aEjIXvXJ+M3+LWwp4ODHtvyrCnFvW3oW3aBNPHsviDeA/154UMu+gb1nFsw/pP+NUfy6/+rfnVG+jX5ZR+9SzqNarCQq8zm7wuJlAxTVSTykFyvQaQnfqpldwh1q6gzQVHtvrc+7XVn7ybR/N6u4DbMftyoNlXU5p9aVEPhU7XXRJgpiQK6wymu55/9qx++sT5hGNntP+4Z1cDPTvt/wg7D/5PsLtTYl/ZV0WZbRXHzP5tnDCJ+4u3hK52LzJObRdvg+j6Bw== -------------------------------------------------------------------------------- /section 6/qt6cb-6-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | If 4 | 5 | Why 6 | Basic flow contol 7 | 8 | How 9 | IF keyword 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | int age = 0; 23 | qInfo() << "Enter your age"; 24 | cin >> age; 25 | 26 | if(age == 0) qFatal("Not a valid age!"); // TRUE or FALSE 27 | 28 | qInfo() << "You entered:" << age; 29 | 30 | if(age < 18) // TRUE runs the code! 31 | { 32 | qInfo() << "You are NOT an adult!"; 33 | qInfo() << "Come back when you are older!!!"; 34 | } 35 | //Here regardless! 36 | 37 | if(age < 21 && age >= 18) qInfo() << "You are not REALLY an adult yet!"; 38 | 39 | if(age >= 21) qInfo() << "You are an adult"; 40 | 41 | if(age > 120) qCritical() << "HOW can you be that old!!!"; 42 | 43 | qInfo() << "Done"; 44 | 45 | return a.exec(); 46 | } 47 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | If else / else if 4 | 5 | Why 6 | Basic flow contol, basically saying do this else to that 7 | 8 | How 9 | IF ELSE keywords 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | int age = 0; 23 | qInfo() << "Please enter your age:"; 24 | cin >> age; 25 | 26 | if(age > 17) { 27 | //True 28 | qInfo() << "You are over 17 years old"; 29 | } else if(age < 12) { 30 | //False True 31 | qInfo() << "You are not even a teen yet!"; 32 | } else { 33 | //False 34 | qInfo() << "You are not over 17 years old"; 35 | } 36 | 37 | return a.exec(); 38 | } 39 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-3/qt6cb-6-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 6/qt6cb-6-3/qt6cb-6-3.png -------------------------------------------------------------------------------- /section 6/qt6cb-6-3/qt6cb-6-3.xml: -------------------------------------------------------------------------------- 1 | 5VhRb5swEP41edxkMDTJa2nSaer20HTq9miFK7gyGDkmwH79DNgQ5AZlU1PSLg+R77MPH999dwZmOEjKW0Gy+BsPgc1cFJYzfDNz3fnCVf81ULWA5zgtEAkattABsKG/QYNIozkNYTdYKDlnkmZDcMvTFLZygBEheDFc9sTZcNeMRGABmy1hNvpIQxm36MJHPf4FaBSbnR2kZxJiFmtgF5OQFwcQXs1wIDiX7SgpA2A1d4aX1m99ZLYLTEAqT3G4e4T8e8rwj6/04R7ur2/9B++TCW5PWK7vWEcrK0MBhIoRbXIhYx7xlLBVj14Lnqch1PsgZfVr7jjPFOgo8BmkrHR6SS65gmKZMD2rbkFUP2v/z74xf+nLNcZNObAqbbWx1gEeJUVDO56LLYwwYcRFRARybN2yy53SPPAEVEDKUQAjku6HgRCtvqhb1ydIDXSO/iJfjpWujYpYWjkbZqSIqYRNRhoCClWnQ/afKGMBZ1w0vhihIEA9u3sQEspxfm06tAP2tMB0+Ru9FX0tOQaLD+roCp2JQGwRuErDV6VvvUboXPR19mT8mf4wccN4zcLHJ1b+sVy9UeXbyi2V2YzMmfOigp1/aABr9TuPgrvzcToFX304BS9OVTCeVMGLEQU7Vg4uVsHzyRXsfzgFL09VsDelgt35f0v8tJ1jOdI57BRcaudw/ck7h/3+EKg39otl0L+8pwf7Mex9MTj96eW9bwbPWcXK7D8INXMHX9Xw6g8= -------------------------------------------------------------------------------- /section 6/qt6cb-6-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Ternary 4 | 5 | Why 6 | Combine IF and else into one line 7 | 8 | How 9 | Use the Ternary syntax 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | int age = 0; 24 | qInfo() << "Please enter your age:"; 25 | cin >> age; 26 | 27 | age > 0 && age <= 100 ? qInfo("You entered a valid age") : qFatal("You did not enter a valid age"); 28 | 29 | return a.exec(); 30 | } 31 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Switch statement 4 | 5 | Why 6 | Much easier to use for a lot of different IF / ELSE situations 7 | 8 | How 9 | Use the Switch statement 10 | Caution, has to be a number! 11 | Can be used with enums! 12 | */ 13 | 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | using namespace std; 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | QCoreApplication a(argc, argv); 24 | 25 | int age = 0; 26 | qInfo() << "Please enter your age:"; 27 | cin >> age; 28 | 29 | switch(age) { 30 | case 0: //if(age == 0) 31 | qFatal("You did not enter a valid age"); 32 | break; 33 | case 16: 34 | qInfo() << "You can drive"; 35 | break; 36 | case 18: 37 | qInfo() << "You can vote"; 38 | break; 39 | case 21: 40 | qInfo() << "You can drink"; 41 | break; 42 | case 67: 43 | qInfo() << "You can retire"; 44 | break; 45 | default: //else 46 | qInfo() << "The default here"; 47 | break; 48 | } 49 | 50 | qInfo() << "Finished"; 51 | 52 | 53 | return a.exec(); 54 | } 55 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-5/qt6cb-6-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 6/qt6cb-6-5/qt6cb-6-5.png -------------------------------------------------------------------------------- /section 6/qt6cb-6-5/qt6cb-6-5.xml: -------------------------------------------------------------------------------- 1 | 5VhRb5swEP41PG4yODTJa2nSaer20HTq9miFK7gyGDkmwH79DNgQ5AZlU1PSLg+R77MPH999dwYcHCTlrSBZ/I2HwBwPhaWDbxzPmy889V8DVQtgH7dAJGjYQm4PbOhv0CDSaE5D2A0WSs6ZpNkQ3PI0ha0cYEQIXgyXPXE23DUjEVjAZkuYjT7SUMYtuvBRj38BGsVmZxfpmYSYxRrYxSTkxQGEVw4OBOeyHSVlAKzmzvDS+q2PzHaBCUjlKQ53j5B/Txn+8ZU+3MP99a3/MPtkgtsTlus71tHKylAAoWJEm1zImEc8JWzVo9eC52kI9T5IWf2aO84zBboKfAYpK51ekkuuoFgmTM+qWxDVz9r/s2/MX/pyjXFTDqxKW22sdYBHSdHQjudiCyNMGHEREYEcW7fscqc0DzwBFZByFMCIpPthIESrL+rW9QlSA52jv8iXa6VroyKWVs6GGSliKmGTkYaAQtXpkP0nyljAGReNL0YoCFDP7h6EhHKcX5sO7YBnWmC6/I3eir6WXIPFB3V0hc5EILYIXKXhq9K3XiN0Lvo6ezL+TH+YuGG8ZuHjEyv/WK7eqPJt5ZbKbEbmzHlRwe4/NIC1+p1Hwd35OJ2Crz6cghenKhhPquDFiIJdKwcXq+D55Ar2P5yCl6cqeDalgr35f0v8tJ1jOdI57BRcaufw/Mk7h/3+EKg39otl0L+8pwf7Mex9MTj96TV73wyes4qV2X8QauYOvqrh1R8= -------------------------------------------------------------------------------- /section 6/qt6cb-6-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Do and While loops 4 | 5 | Why 6 | To repeat code 7 | 8 | How 9 | Use the DO and WHILE keywords 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | int start = 80; 24 | int max = 100; 25 | 26 | //While loop - evaluate first 27 | int i = start; 28 | while(i < max) { 29 | qInfo() << "While = " << i; 30 | i++; 31 | } 32 | 33 | qInfo("------------"); 34 | 35 | //Do loop - evaluate last 36 | i = start; 37 | do { 38 | qInfo() << "Do = " << i; 39 | i++; 40 | } while(i < max); 41 | 42 | qInfo() << "Done"; 43 | 44 | return a.exec(); 45 | } 46 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | For loop 4 | 5 | Why 6 | Loop within a range 7 | 8 | How 9 | Use the FOR keywork and syntax 10 | start, end, step 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | using namespace std; 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | QCoreApplication a(argc, argv); 24 | 25 | int max = 0; 26 | qInfo() << "Please enter a max"; 27 | cin >> max; 28 | 29 | if(max <= 0) qFatal("Please enter a valid number next time!"); 30 | 31 | for(int i = 0 ; i < max ; i++) { 32 | qInfo() << "i = " << i; 33 | } 34 | 35 | array ages = {44,56,32,16}; //Zero based index array 36 | for(unsigned long i = 0;i < ages.size();i++) { 37 | qInfo() << "ages[" << i << "] = " << ages.at(i); 38 | } 39 | 40 | return a.exec(); 41 | } 42 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-8 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-8 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Age calculator example 4 | 5 | Why 6 | Solidify what you have learned 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | qInfo() << "Enter your age:"; 24 | int age = 0; 25 | cin >> age; 26 | 27 | if(age >=1 && age <=120) { 28 | //True 29 | int dog_years = age * 7; 30 | qInfo() << "You age in dog years:" << dog_years; 31 | } else { 32 | //False 33 | qWarning() << "Warning: Not a valid age!"; 34 | } 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-8/qt6cb-6-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 6/qt6cb-6-8/qt6cb-6-.png -------------------------------------------------------------------------------- /section 6/qt6cb-6-8/qt6cb-6.xml: -------------------------------------------------------------------------------- 1 | 5ZjRbpswFIafJpedbFxCcjsSukmrdpFKaS7d4IIrw0HGJKRPPxNMgHrNMikZTZeLiPPbB9sf5z9IjIiflHeSZvE9hEyMHBSWIzIbOY43cfR/Jexq4RbjWogkD2upIyz4KzMiMmrBQ5b3JioAoXjWF9eQpmytehqVErb9ac8g+qtmNGKWsFhTYatLHqq4VicuavVvjEdxszJGZiShzWQj5DENYduRyHxEfAmg6quk9Jmo2DVc6rzgndHDxiRL1SkJYgnjhyh8unem+Gd588rFy+zmtr7LhorCHNhsVu0aAizUQEwIUsUQQUrFvFW/SijSkFXLIB21c34AZFrEWnxhSu3M06WFAi3FKhFmtF6zWujdsxkph0Ku2ZEDNTVCZcTUkXnk8AR05TJImJI7nSeZoIpv+vugpoaiw7wWs74wpP+COraoL/SGlYW+D3Ybc8UWGd2ff6vd1of4zIXwQYDc5xKEfB+hA9wNk4qVx/HaOEwCacrdmJiYcNs6AjdlHnfcMEYXAuhYAOdpeFZ8QYDQxfDhofmNP5vtyYm2d4e0PbGor3l6ZtMH+neZqsWDV+3E4vcg9dV1V657YuV6g76wkIU+oCL/X9hPh2TvWui/B3bTiCF5KvI/N4w+/ku2D+9N+5ja7WPym+4xuVT3wIO841jJ1WOV/sU10aozMivNnffBrglSfd7HbrBq71CFbdo+avLO6AzvRGc4QzrDs5wxg0gLK0Zlbj3sj2KMgxGMMRw09HsVk6tzBh7MGdNrcMbUcsaSypSn0Yd1hYv/nSt02H522Y91vl2R+S8= -------------------------------------------------------------------------------- /section 6/qt6cb-6-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-6-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-6-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-6-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Lazy husband simulator 4 | 5 | Why 6 | Show how flow control statments work 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | int main(int argc, char *argv[]) 16 | { 17 | QCoreApplication a(argc, argv); 18 | 19 | int max = 5; 20 | QString task = "Please take out the trash"; 21 | 22 | for(int i = 1; i < 50; i++) 23 | { 24 | qInfo() << "Wife:" << task; 25 | qWarning() << "Wife: I have asked" << i << "times!"; 26 | 27 | if(i >= max) 28 | { 29 | qInfo() << "Husband: Ok ok ok, im going..."; 30 | break; 31 | } 32 | 33 | qInfo() << "Husband: I will after this show..."; 34 | } 35 | 36 | qInfo() << "Done."; 37 | 38 | return a.exec(); 39 | } 40 | -------------------------------------------------------------------------------- /section 6/qt6cb-6-assign/qt6cb-6-assign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 6/qt6cb-6-assign/qt6cb-6-assign.png -------------------------------------------------------------------------------- /section 6/qt6cb-6-assign/qt6cb-6-assign.xml: -------------------------------------------------------------------------------- 1 | 3VhNc9owEP01PpKRbQz02BicdoZMOiUzSY4CLbYysuWRZTD8+spYxvYoUNJCScoBtE+7+ni7Dy9Yrh8XdwKn0T0nwCwHkcJyx5bjDEeOei+BTQX0bbsCQkFJBbWAGd2CBpFGc0og6zhKzpmkaRdc8CSBhexgWAi+7rotOevumuIQDGC2wMxEnyiRUYWOPNTg34CGUb2zjfRMjGtnDWQRJnzdgtyJ5fqCc1mN4sIHVnJX81LFBQdm9wcTkMhTAtgTHzyGZH7vfLEfit6Wstdxr1+tssIs1xfWh5WbmgEgihBtciEjHvIEs0mD3gqeJwTKbZCyGp8p56kCbQW+gpQbnV2cS66gSMZMz1Z7lhsdvJuGMp6LBRy5UF0jWIQgj/i5+wyoygUegxQbFSeAYUlX3XNgXUPh3q+hWQ000+9g3TZYn6kDS4P6LrHriEqYpXh3/7VSW5fEJWXM54yLXayLkO8jtCd3BUJCcZxekw4d4NblrkXsanPdKMKuyzxqqWGALkSgYxA4SchZ6QsChC5Gn311/txPLnP3RJnb/Wvq3DXKNHj4eWaVB+p1mTLdl+T1yhQZZP2DMoWCymcdXo5fyvGNp61x0Zoab2ojUfd9bhutqNJswnZWHXfOJ1//Mzz6HLPjmEKWKeQxwon66L+Z8imeq76ykybMaJio8UIxBUoOt2XxU9W5fdUTMSWkqgjI6BbPd+uVpKecJnJ3Me/W8sbH1KPbSh3cNHPtBB0p3YNa66Eb5AyG1WInM6+X+1Gev+XCl8sMpJGa/a5/ka2rtIO1AO0/EaD98QXoXFWAniHAOwG4lNB/p8EDRLc0OBp6nWde3Zp/XEna5hfo98DsKSIez/Ps9/1EV6yX7C6G3e7CQWZ3MXqjuRi9v7lQZvOzuuK9+W/CnfwC -------------------------------------------------------------------------------- /section 7/qt6cb-7-1/qt6cb-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 7/qt6cb-7-1/qt6cb-7-1.png -------------------------------------------------------------------------------- /section 7/qt6cb-7-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-2 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-2 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Intro to functions 4 | 5 | Why 6 | Give a basic example of functions 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | 15 | void test() 16 | { 17 | qInfo() << "Hello from test"; 18 | } 19 | 20 | 21 | void test2() 22 | { 23 | qInfo() << "Hello from test2"; 24 | test(); 25 | } 26 | 27 | int main(int argc, char *argv[]) 28 | { 29 | QCoreApplication a(argc, argv); 30 | 31 | //test(); 32 | test2(); 33 | 34 | return a.exec(); 35 | } 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-3 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-3 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Function parameters 4 | Return results 5 | 6 | Why 7 | Data to and from a function 8 | 9 | How 10 | See below 11 | */ 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | using namespace std; 18 | 19 | int calc(int offset, int age) { 20 | int x = offset * age; 21 | qInfo() << "Calc:" << x; 22 | return x; 23 | } 24 | 25 | int catYears(int age) { 26 | //Other things here 27 | qInfo() << "Performing math for cat years"; 28 | return calc(9,age); 29 | } 30 | 31 | int dogYears(int age) { 32 | //Other things here 33 | qInfo() << "Performing math for dog years"; 34 | return calc(7,age); 35 | } 36 | 37 | 38 | int main(int argc, char *argv[]) 39 | { 40 | QCoreApplication a(argc, argv); 41 | 42 | int age = 0; 43 | qInfo() << "Enter your age:"; 44 | cin >> age; 45 | qInfo() << "Age:" << age; 46 | 47 | int value = calc(2,age); 48 | qInfo() << "Double:" << value; 49 | 50 | qInfo() << "Cat years:" << catYears(age); 51 | qInfo() << "Dog years:" << dogYears(age); 52 | 53 | return a.exec(); 54 | } 55 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-4 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-4 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Function Flow control 4 | 5 | Why 6 | We want functions to perform tasks 7 | 8 | How 9 | Put flow control into a function 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | using namespace std; 17 | 18 | int calc(int offset,int age) 19 | { 20 | if(offset == 0) qFatal("Offset can not be zero!"); 21 | 22 | if(age <= 0 || age > 120) 23 | { 24 | qFatal("Invalid Age"); 25 | } 26 | 27 | return offset * age; 28 | } 29 | 30 | int catYears(int age) 31 | { 32 | return calc(9,age); 33 | } 34 | 35 | int dogYears(int age) 36 | { 37 | return calc(7,age); 38 | } 39 | 40 | int main(int argc, char *argv[]) 41 | { 42 | QCoreApplication a(argc, argv); 43 | 44 | int age; 45 | qInfo() << "Enter your age:"; 46 | cin >> age; 47 | 48 | int cat = catYears(age); 49 | int dog = dogYears(age); 50 | 51 | qInfo() << "Dog:" << dog; 52 | qInfo() << "Cat:" << cat; 53 | 54 | return a.exec(); 55 | } 56 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-4/qt6cb-7-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 7/qt6cb-7-4/qt6cb-7-4.png -------------------------------------------------------------------------------- /section 7/qt6cb-7-4/qt6cb-7-4.xml: -------------------------------------------------------------------------------- 1 | 3VhNc9owEP01zLSHZGQrxvhaA+2hTDtDZxKOKlZsZWSvRwiw8+srI8kf8UDTAnUaDuB90rLS230rwQiHafFZkDxZQET5yEVRMcLTkev6E1e9V0CpAexhDcSCRRpyGmDJnqkBkUG3LKKbzkQJwCXLu+AasoyuZQcjQsC+O+0ReDdqTmLaA5ZrwvvoPYtkotGJhxr8C2VxYiM7yIykxE42wCYhEexbEJ6NcCgApH5Ki5DyijvLi/abHxmtFyZoJl/jwO9h/COOfi7cwPlW3Dwz/jS98cf6a3aEb82OzWplaSmgkWLEmCBkAjFkhM8a9JOAbRbRKg5SVjPnK0CuQEeBT1TK0qSXbCUoKJEpN6M6ZhXo6OYMtIGtWNMTO7JFQkRM5amde3UOVO1SSKkUpXIUlBPJdt2FEFNFcT2vIVo9GK7/gHenR/tSrVj2uO8yu0+YpMucHAjYK711WXxknIfAQRx8MUJhiFDN7o4KSYvT/PbpMA5jU8RGxbam940kHIslLTlYt4vz5/b4m2XRRdmbzxG6Env4bmj6fH8IldOCyYfK/dYz1qo1Mi3MNx+M0hgX7Axa8a9oDe6QnWESvLeOfHanNa7fganQtahqxdiehF+oRefZeL3ISr2Mv09UgIfUkNNSELp1vZMiUikT5UPbWDUyrMzG7WANKb4AnVktZ6kvuHs7SfXfUVKPnI//Jql2ma2WuiAs62X6NxeEbpp7l625el3luuCMh74uBKhH4BRiBawoERv1+cH/+GbZrM8FS6czOJ39239IqpOttHQG/w+d7hXpVGbz+1if282fDHj2Cw== -------------------------------------------------------------------------------- /section 7/qt6cb-7-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Function Overloading 4 | 5 | Why 6 | We want the same name but different params 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | void test() 17 | { 18 | qInfo() << "This is a test"; 19 | } 20 | 21 | void test(QString name) 22 | { 23 | qInfo() << "Name:" << name; 24 | } 25 | 26 | void test(int age) 27 | { 28 | qInfo() << "Age:" << age; 29 | } 30 | 31 | void test(bool isActive) 32 | { 33 | qInfo() << "Testing for active"; 34 | if(isActive) 35 | { 36 | qInfo() << "Yes it is active"; 37 | } 38 | else 39 | { 40 | qInfo() << "No this is not active"; 41 | } 42 | } 43 | 44 | int main(int argc, char *argv[]) 45 | { 46 | QCoreApplication a(argc, argv); 47 | 48 | test(QString("Bryan Cairns")); 49 | 50 | 51 | test(false); 52 | test(42); 53 | 54 | test(); 55 | test(true); 56 | 57 | return a.exec(); 58 | } 59 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-6 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-6 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | By ref and by value 4 | 5 | Why 6 | C++ allows us to have total control 7 | Value is a copy, we recreate the entire object 8 | Reference is the actual object 9 | 10 | How 11 | See below 12 | Note this talks a bit about scope as well 13 | */ 14 | 15 | #include 16 | #include 17 | 18 | //Passing by value - Copy - QObject do not like being copied! 19 | void testVal(int x) 20 | { 21 | x = x * 10; //Modifying the copy 22 | qInfo() << "TextVal X:" << x; //50 23 | } //copy is destroyed! 24 | 25 | 26 | //Pass by Reference 27 | void testRef(int &y) 28 | { 29 | y = y * 10; //Modifying original 30 | qInfo() << "TextVal Y:" << y; //50 31 | } 32 | 33 | int main(int argc, char *argv[]) 34 | { 35 | QCoreApplication a(argc, argv); 36 | 37 | int x = 5; 38 | qInfo() << "Main X:" << x; //5 39 | testVal(x); //COPY - Value 40 | qInfo() << "Main X:" << x; //5 41 | 42 | int y = 5; 43 | qInfo() << "Main Y:" << y; //5 44 | testRef(y); //Ref - Memory 45 | qInfo() << "Main Y:" << y; //50 46 | 47 | return a.exec(); 48 | } 49 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-6/qt6cb-7-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 7/qt6cb-7-6/qt6cb-7-6.png -------------------------------------------------------------------------------- /section 7/qt6cb-7-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Functions in structs 4 | 5 | Why 6 | Some people just want to watch the world burn 7 | C++ can do it all, but some things are best left alone 8 | 9 | How 10 | See below, but understand that classes are MUCH better to use 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | struct laptop { 18 | int weight; 19 | 20 | double asKilograms() { 21 | return weight * 0.453592; 22 | } 23 | }; 24 | 25 | int main(int argc, char *argv[]) 26 | { 27 | QCoreApplication a(argc, argv); 28 | 29 | laptop notebook; 30 | notebook.weight = 5; 31 | 32 | qInfo() << "Pounds" << notebook.weight; 33 | qInfo() << "Kilograms" << notebook.asKilograms(); 34 | 35 | 36 | return a.exec(); 37 | } 38 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-8 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-8 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-8/qt6cb-7-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 7/qt6cb-7-8/qt6cb-7-8.png -------------------------------------------------------------------------------- /section 7/qt6cb-7-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-7-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-7-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-7-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 7/qt6cb-7-assign/qt6cb-7-assign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 7/qt6cb-7-assign/qt6cb-7-assign.png -------------------------------------------------------------------------------- /section 8/qt6cb-8-1/qt6cb-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 8/qt6cb-8-1/qt6cb-8-1.png -------------------------------------------------------------------------------- /section 8/qt6cb-8-1/qt6cb-8-1.xml: -------------------------------------------------------------------------------- 1 | 1ZfLcoIwFIafhqUzCZHbVlvaRbvouOg6QoR0gqExFPTpGyWgFG/YqnTDJD+5fvk5JxhonBRPAqfxKw8JM0wQFgZ6MEzTcU31XAvLUhhCWAqRoGEp7QgTuiJaBFrNaEgWjYaScyZp2hQDPp+TQDY0LATPm81mnDVnTXFEWsIkwKytvtNQxqXqWmCrPxMaxdXMEOg3Ca4aa2ER45DnOxJ6NNBYcC7LUlKMCVuzq7iU/fwDb+uFCTKX53SggtrOQ/Dxki0/vcFqivj8beANy2G+MMv0jvVq5bJCkMdUkkmKg3U9V6dsoFEsE6ZqUBXxIi3Bz2hB1FyjGWVszBkXm+4IIc/z1aJGeiYiJCkO7gHWZJSjCE+IFEvVRHdAjoap3WTrar49GuhpLd49lkrE2g5RPfSWmCpoaF0AeqcBRoJn6cHda+fiadUc/JaK6dwfi9MzXx05vDbXO3JzT3NTw6jopyqjEwR/AAPA91V0ugawyohWw4eW1bahuQeney2adTA+hlPEPJlmi844fb8LzuNfMLSbXzAy2+jc25KDXYyoclu6FgPGs/ACkgD8FUnb+kES7YmFNzah2b8UMdyTIuo7121CHQToP+QIfXx9ShIQnHFru2OWOIist2nC7muwu4ivd/+QZ/Ul714EEDYNWl8j/j4bq+r2D3Dzbuc3Gj1+Aw== -------------------------------------------------------------------------------- /section 8/qt6cb-8-2/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-2 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-2 18 | main.cpp 19 | animal.h 20 | animal.cpp 21 | ) 22 | target_link_libraries(qt6cb-8-2 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-2/animal.cpp: -------------------------------------------------------------------------------- 1 | #include "animal.h" 2 | 3 | Animal::Animal(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Constructed"; 6 | } 7 | 8 | void Animal::speak(QString message) 9 | { 10 | qInfo() << this << message; 11 | } 12 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-2/animal.h: -------------------------------------------------------------------------------- 1 | #ifndef ANIMAL_H 2 | #define ANIMAL_H 3 | 4 | #include 5 | #include 6 | 7 | class Animal : public QObject 8 | { 9 | Q_OBJECT 10 | 11 | public: 12 | explicit Animal(QObject *parent = nullptr); 13 | void speak(QString message); 14 | 15 | 16 | 17 | signals: 18 | 19 | }; 20 | 21 | #endif // ANIMAL_H 22 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-2/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | intro to classes 4 | 5 | Why 6 | We want to create objects from blueprints 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include "animal.h" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | Animal cat; 21 | Animal dog; 22 | Animal fish; 23 | 24 | cat.setObjectName("Kitty"); 25 | dog.setObjectName("Fido"); 26 | fish.setObjectName("FishStick"); 27 | 28 | cat.speak("meow"); 29 | dog.speak("bark"); 30 | fish.speak("blablabla"); 31 | 32 | return a.exec(); 33 | } 34 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-3 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-3 18 | main.cpp 19 | laptop.h 20 | laptop.cpp 21 | ) 22 | target_link_libraries(qt6cb-8-3 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-3/laptop.cpp: -------------------------------------------------------------------------------- 1 | #include "laptop.h" 2 | 3 | Laptop::Laptop(QObject *parent, QString name) : QObject(parent) 4 | { 5 | this->name = name; 6 | qInfo() << this << "Constructor" << name; 7 | } 8 | 9 | Laptop::~Laptop() 10 | { 11 | qInfo() << this << "Decontructor" << name; 12 | } 13 | 14 | double Laptop::asKilo() 15 | { 16 | return weight * 0.453592; 17 | } 18 | 19 | void Laptop::test() 20 | { 21 | qInfo() << this << "Test:" << name << " Kilo:" << asKilo(); 22 | } 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-3/laptop.h: -------------------------------------------------------------------------------- 1 | #ifndef LAPTOP_H 2 | #define LAPTOP_H 3 | 4 | #include 5 | #include 6 | 7 | class Laptop : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | //Constructor 12 | explicit Laptop(QObject *parent = nullptr,QString name = ""); 13 | 14 | //Decontructor 15 | ~Laptop(); 16 | 17 | //Vars 18 | int weight; 19 | QString name; 20 | 21 | //Functions 22 | double asKilo(); 23 | void test(); 24 | 25 | signals: 26 | 27 | }; 28 | 29 | #endif // LAPTOP_H 30 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-3/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Contructors and descontructors 4 | 5 | Why 6 | Object lifecycles 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "laptop.h" 14 | 15 | void test(Laptop &machine) 16 | { 17 | machine.test(); 18 | } 19 | 20 | void makeLaptops() 21 | { 22 | //The stack 23 | Laptop mine(nullptr,"my laptop"); 24 | Laptop yours(nullptr,"your laptop"); 25 | 26 | mine.weight = 3; 27 | yours.weight = 5; 28 | 29 | test(mine); 30 | test(yours); 31 | 32 | //Will be deleted from the stack automatically 33 | } 34 | 35 | int main(int argc, char *argv[]) 36 | { 37 | QCoreApplication a(argc, argv); 38 | 39 | makeLaptops(); 40 | 41 | return a.exec(); 42 | } 43 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-4 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-4 18 | main.cpp 19 | animal.h 20 | animal.cpp 21 | mammal.h 22 | mammal.cpp 23 | canine.h 24 | canine.cpp 25 | feline.h 26 | feline.cpp 27 | monster.h 28 | monster.cpp 29 | ) 30 | target_link_libraries(qt6cb-8-4 Qt${QT_VERSION_MAJOR}::Core) 31 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/animal.cpp: -------------------------------------------------------------------------------- 1 | #include "animal.h" 2 | 3 | Animal::Animal(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << " constructed"; 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/animal.h: -------------------------------------------------------------------------------- 1 | #ifndef ANIMAL_H 2 | #define ANIMAL_H 3 | 4 | #include 5 | #include 6 | 7 | class Animal : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Animal(QObject *parent = nullptr); 12 | 13 | bool isAlive() { 14 | return true; 15 | } 16 | signals: 17 | 18 | }; 19 | 20 | #endif // ANIMAL_H 21 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/canine.cpp: -------------------------------------------------------------------------------- 1 | #include "canine.h" 2 | 3 | Canine::Canine(QObject *parent) : Mammal(parent) 4 | { 5 | qInfo() << this << " constructed"; 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/canine.h: -------------------------------------------------------------------------------- 1 | #ifndef CANINE_H 2 | #define CANINE_H 3 | 4 | #include 5 | #include 6 | #include "mammal.h" 7 | 8 | class Canine : public Mammal 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Canine(QObject *parent = nullptr); 13 | void bark() {qInfo() << "bark!"; } 14 | 15 | signals: 16 | 17 | }; 18 | 19 | #endif // CANINE_H 20 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : Mammal(parent) 4 | { 5 | qInfo() << this << " constructed"; 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | #include "mammal.h" 7 | 8 | class Feline : public Mammal 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Feline(QObject *parent = nullptr); 13 | void meow() {qInfo() << "meow!"; } 14 | signals: 15 | 16 | }; 17 | 18 | #endif // FELINE_H 19 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Class inheritance 4 | 5 | Why 6 | We want to inherit aspects of a class 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include "feline.h" 15 | #include "canine.h" 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | Canine dog; 22 | Feline cat; 23 | 24 | 25 | return a.exec(); 26 | } 27 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/mammal.cpp: -------------------------------------------------------------------------------- 1 | #include "mammal.h" 2 | 3 | Mammal::Mammal(QObject *parent) : Animal(parent) 4 | { 5 | qInfo() << this << " constructed"; 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/mammal.h: -------------------------------------------------------------------------------- 1 | #ifndef MAMMAL_H 2 | #define MAMMAL_H 3 | 4 | #include 5 | #include 6 | #include "animal.h" 7 | 8 | class Mammal : public Animal 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Mammal(QObject *parent = nullptr); 13 | 14 | bool hasBackBone() 15 | { 16 | return true; 17 | } 18 | 19 | signals: 20 | 21 | }; 22 | 23 | #endif // MAMMAL_H 24 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/monster.cpp: -------------------------------------------------------------------------------- 1 | #include "monster.h" 2 | 3 | Monster::Monster(QObject *parent) : QObject(parent), Feline(parent), Canine(parent) 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/monster.h: -------------------------------------------------------------------------------- 1 | #ifndef MONSTER_H 2 | #define MONSTER_H 3 | 4 | #include 5 | #include 6 | #include "feline.h" 7 | #include "canine.h" 8 | 9 | class Monster : public QObject,Feline,Canine 10 | { 11 | Q_OBJECT 12 | public: 13 | explicit Monster(QObject *parent = nullptr); 14 | 15 | signals: 16 | 17 | }; 18 | 19 | #endif // MONSTER_H 20 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/qt6cb-8-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 8/qt6cb-8-4/qt6cb-8-4.png -------------------------------------------------------------------------------- /section 8/qt6cb-8-4/qt6cb-8-4.xml: -------------------------------------------------------------------------------- 1 | 5ZjBjpswEIafhmMlsEkC17ChrdSqh1RaqTc3OOCVYahjAuzT1wQDYZNNUgnCbvcSwe8xtj//4yEY2IuLz4Kk0XcIKDeQGRQGfjAQWjhI/VZCWQu2ZdVCKFhQS0fCmj1TLZpazVhAd71ACcAlS/viBpKEbmRPI0JA3g/bAu+PmpKQngjrDeGn6iMLZFSrzszs9C+UhVEzsmXqlpg0wVrYRSSA/EjCKwN7AkDWV3HhUV6xa7jU/fxXWtuJCZrIWzqg9OcT/Nk+PP/6ajHvR5Sv0eMnXD9lT3imF6wnK8uGAA0UEH0LQkYQQkL4qlOXArIkoNUwprrrYr4BpEq0lPhEpSz17pJMgpIiGXPdWo9ZDfTq2rS0g0xs6IUFNR4hIqTyQhxqd0A5l0JMpShVP0E5kWzfnwfRHgrbuA6zutCk/4G6dZ16HjFJ1yk5LDZXqdUnRnZp7fYtKyryyy3j3AMO4tAdm6bvm2aLdk+FpMVluKcwdAe7sXTZT838KB+0FB2lQqMNTm/2v3kW3ehZe0rPLj4q9fmU1N2PSt2Zkjq6Tl1EEP/O1MDLKyf1iAczdmb9g3lxejJb1pmjuRUHJ2ePR67iNhi5FyUNo4lrmnXDK8H7SvT5jYlumed36j6ZPh/Prxi7ru+P8wo2uV+dMfPcdT1vGG6zt8atOXgv5jnn6t8tndRw2OmDs50zpQXdldyIRRkr0w2Wqovr5O5ruRFrclWRB7Mcvhs4ddt9dzm0HX28wqu/ -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-5 18 | main.cpp 19 | Toaster.h 20 | Freezer.h 21 | Microwave.h 22 | applicance.h 23 | applicance.cpp 24 | ) 25 | target_link_libraries(qt6cb-8-5 Qt${QT_VERSION_MAJOR}::Core) 26 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/Freezer.h: -------------------------------------------------------------------------------- 1 | #ifndef FREEZER_H 2 | #define FREEZER_H 3 | 4 | class Freezer 5 | { 6 | public: 7 | virtual bool freeze() = 0; //Most of the time 8 | }; 9 | 10 | #endif // FREEZER_H 11 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/Microwave.h: -------------------------------------------------------------------------------- 1 | #ifndef MICROWAVE_H 2 | #define MICROWAVE_H 3 | 4 | class Microwave 5 | { 6 | public: 7 | virtual bool cook() = 0; //Most of the time 8 | }; 9 | 10 | #endif // MICROWAVE_H 11 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/Toaster.h: -------------------------------------------------------------------------------- 1 | #ifndef TOASTER_H 2 | #define TOASTER_H 3 | 4 | class Toaster 5 | { 6 | public: 7 | virtual bool grill() = 0; //Most of the time 8 | }; 9 | 10 | #endif // TOASTER_H 11 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/applicance.cpp: -------------------------------------------------------------------------------- 1 | #include "applicance.h" 2 | 3 | Applicance::Applicance(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Constructed"; 6 | } 7 | 8 | 9 | bool Applicance::cook() 10 | { 11 | return true; 12 | } 13 | 14 | bool Applicance::grill() 15 | { 16 | return true; 17 | } 18 | 19 | bool Applicance::freeze() 20 | { 21 | return true; 22 | } 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/applicance.h: -------------------------------------------------------------------------------- 1 | #ifndef APPLICANCE_H 2 | #define APPLICANCE_H 3 | 4 | #include 5 | #include 6 | #include "Freezer.h" 7 | #include "Microwave.h" 8 | #include "Toaster.h" 9 | 10 | class Applicance : public QObject, public Freezer, public Toaster, public Microwave 11 | { 12 | Q_OBJECT 13 | public: 14 | explicit Applicance(QObject *parent = nullptr); 15 | 16 | // Microwave interface 17 | bool cook(); 18 | 19 | // Toaster interface 20 | bool grill(); 21 | 22 | // Freezer interface 23 | bool freeze(); 24 | 25 | signals: 26 | 27 | 28 | }; 29 | 30 | #endif // APPLICANCE_H 31 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | interfaces 4 | 5 | Why 6 | We want to define a contract between objects 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include "applicance.h" 16 | 17 | int main(int argc, char *argv[]) 18 | { 19 | QCoreApplication a(argc, argv); 20 | 21 | Applicance machine3000; 22 | 23 | qInfo() << "Cook:" << machine3000.cook(); 24 | qInfo() << "Freeze:" << machine3000.freeze(); 25 | qInfo() << "Grill:" << machine3000.grill(); 26 | 27 | return a.exec(); 28 | } 29 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/qt6cb-8-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 8/qt6cb-8-5/qt6cb-8-5.png -------------------------------------------------------------------------------- /section 8/qt6cb-8-5/qt6cb-8-5.xml: -------------------------------------------------------------------------------- 1 | 3ZfRbpswFIafhstNxoSG3YaGdtKmXWRSpd154QTcGQ5zTIA+/UwwAUqaUilRptxE+Pdxjv3x+9hYjp+UD5Jl8XcMQViUhKXl3FuUzj2qf2uhaoSZbTdCJHnYSD1hxV/AiMSoOQ9hOwhUiELxbCiuMU1hrQYakxKLYdgGxTBrxiIYCas1E2P1iYcqblTPJZ3+CDyK28w2MT0Ja4ONsI1ZiEVPcpaW40tE1TwlpQ+iZtdyacYFb/QeJiYhVVMG0OznM/7d3L/8+mpz/0dcrOjTJ6f5lx0TuVmwmayqWgIQaiCmiVLFGGHKxLJTFxLzNIQ6DdGtLuYbYqZFW4vPoFRl3i7LFWopVokwvU3OOtGbazPSFnO5hhMLaj3CZATqRBw9vAHtXMAElKz0OAmCKb4bzoMZD0WHuA6zfjCkP0Ddfp96EXMFq4ztF1vorTUkxrZZ4/YNL2vyiw0XwkeBcj/cISQICDmg3YFUUJ6GO4ZhBsxaS1fDrVn09oOR4t5WaLXz0/tya6alE01re9d0LZ1g29vk3qvX1+A+wp6APkheo5cxJr9znXzxTu24YKlwPHdYKui4Vtj2kWJxEM9P7/aOOG+qba97yHkj8BKZHMMXQl/m4Mq+HR5x9O6Ib+lR37qX8i0Z4dNnPvvz0ZvCEWpBcB5q7vzVxWDmTqN2d7HNPq6V/zs06s0/Xw6bbnZfGPu+3meas/wH -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-6 18 | main.cpp 19 | feline.h 20 | feline.cpp 21 | lion.h 22 | lion.cpp 23 | ) 24 | target_link_libraries(qt6cb-8-6 Qt${QT_VERSION_MAJOR}::Core) 25 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/feline.cpp: -------------------------------------------------------------------------------- 1 | #include "feline.h" 2 | 3 | Feline::Feline(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Constructed"; 6 | } 7 | 8 | void Feline::speak() 9 | { 10 | qInfo() << this << "meow"; 11 | } 12 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/feline.h: -------------------------------------------------------------------------------- 1 | #ifndef FELINE_H 2 | #define FELINE_H 3 | 4 | #include 5 | #include 6 | 7 | class Feline : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Feline(QObject *parent = nullptr); 12 | 13 | void speak(); 14 | 15 | signals: 16 | 17 | }; 18 | 19 | #endif // FELINE_H 20 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/lion.cpp: -------------------------------------------------------------------------------- 1 | #include "lion.h" 2 | 3 | Lion::Lion(QObject *parent) : Feline(parent) 4 | { 5 | qInfo() << this << "Constructed"; 6 | } 7 | 8 | void Lion::speak() 9 | { 10 | qInfo() << this << "ROAR!!!"; 11 | 12 | //calling the function from a base class 13 | Feline::speak(); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/lion.h: -------------------------------------------------------------------------------- 1 | #ifndef LION_H 2 | #define LION_H 3 | 4 | #include 5 | #include 6 | #include "feline.h" 7 | 8 | class Lion : public Feline 9 | { 10 | Q_OBJECT 11 | public: 12 | explicit Lion(QObject *parent = nullptr); 13 | 14 | void speak(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // LION_H 21 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Overriding 4 | 5 | Why 6 | We want to change a base classes behavior 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include 14 | #include "lion.h" 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | QCoreApplication a(argc, argv); 19 | 20 | Lion leo; 21 | leo.speak(); 22 | 23 | return a.exec(); 24 | } 25 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/qt6cb-8-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 8/qt6cb-8-6/qt6cb-8-6.png -------------------------------------------------------------------------------- /section 8/qt6cb-8-6/qt6cb-8-6.xml: -------------------------------------------------------------------------------- 1 | 5Zddb5swFIZ/TS43gQkNuw0N26RO1ZRJlXbnhhNwZjjMMYH0188E8xWnaSoRRepuInh9nGM/fn1sJo6flF8FzeIfGAKfECssJ879hJCZR9RvJexrYWrbtRAJFtZST1iyF9CipdWchbAdBEpELlk2FFeYprCSA40KgcUwbI18mDWjERjCckW5qT6xUMa16rlWp38DFsVNZtvSLQltgrWwjWmIRU9yFhPHF4iyfkpKH3jFruFS9wteaW0HJiCVl3Qg2a8N/l3fv/z+bjP/MS6W5OmTU//LjvJcT1gPVu4bAhAqIPoVhYwxwpTyRafOBeZpCFUaS711MQ+ImRJtJW5Ayr1eXZpLVFIsE65b65xVolfnpqUt5mIFZybUeISKCOSZONKugHIuYAJS7FU/AZxKthuOg2oPRW1ch1k9aNLvoG4b1H8+Pm8q+x7DL2ImYZnRw5wLtcOG4Og2q02/ZmW1APM149xHjuLQ3bGsILCslvAOhITyPGOTie4wbZy9H+7QorcttBT3dkSjjQ/xy0fzLrnQu7Z3S/MS073/Cfde2b4FdwN7AJylYMAXMSbPuUo/f6N6XLFYOJ47LBbErBa2faJctOL4/D7eWeddatzbnnaeAf6BYWrC51zd6uDGvh0ecuTuhG/JSd+61/KtZeBTpz798967wglqQTAONXd2dDWYupdRu7vaZjer5RjQKmRjWe0YGvFmn6+HTb12nxqHtt73mrP4Bw== -------------------------------------------------------------------------------- /section 8/qt6cb-8-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-7 18 | main.cpp 19 | test.h 20 | test.cpp 21 | ) 22 | target_link_libraries(qt6cb-8-7 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | What 4 | QObject Class 5 | 6 | Why 7 | We want to take a deep look at Qt's base class 8 | 9 | How 10 | Documentation! 11 | https://doc.qt.io/qt-6/qobject.html 12 | https://doc.qt.io/qt-6/metaobjects.html 13 | 14 | */ 15 | 16 | 17 | #include 18 | #include "test.h" 19 | 20 | int main(int argc, char *argv[]) 21 | { 22 | QCoreApplication a(argc, argv); 23 | 24 | Test t; 25 | 26 | 27 | return a.exec(); 28 | } 29 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-7/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-7/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | 6 | class Test : public QObject 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit Test(QObject *parent = nullptr); 11 | 12 | signals: 13 | 14 | public slots: 15 | 16 | }; 17 | 18 | #endif // TEST_H 19 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-8 18 | main.cpp 19 | agecalc.h 20 | agecalc.cpp 21 | ) 22 | target_link_libraries(qt6cb-8-8 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-8/agecalc.cpp: -------------------------------------------------------------------------------- 1 | #include "agecalc.h" 2 | 3 | AgeCalc::AgeCalc(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | int AgeCalc::age() const 9 | { 10 | return m_age; 11 | } 12 | 13 | void AgeCalc::setAge(int age) 14 | { 15 | //Logic here age > 0 16 | m_age = age; 17 | } 18 | 19 | QString AgeCalc::name() const 20 | { 21 | return m_name; 22 | } 23 | 24 | void AgeCalc::setName(const QString &name) 25 | { 26 | m_name = name; 27 | } 28 | 29 | int AgeCalc::dogYears() const 30 | { 31 | return m_age * 7; 32 | } 33 | 34 | int AgeCalc::catYears() const 35 | { 36 | return m_age * 9; 37 | } 38 | 39 | int AgeCalc::humanYears() const 40 | { 41 | return m_age; 42 | } 43 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-8/agecalc.h: -------------------------------------------------------------------------------- 1 | #ifndef AGECALC_H 2 | #define AGECALC_H 3 | 4 | #include 5 | 6 | class AgeCalc : public QObject 7 | { 8 | //private 9 | Q_OBJECT 10 | public: 11 | explicit AgeCalc(QObject *parent = nullptr); 12 | 13 | int age() const; 14 | void setAge(int age); 15 | 16 | QString name() const; 17 | void setName(const QString &name); 18 | 19 | int dogYears() const; 20 | int catYears() const; 21 | int humanYears() const; 22 | 23 | signals: 24 | 25 | private: 26 | int m_age; 27 | QString m_name; 28 | }; 29 | 30 | #endif // AGECALC_H 31 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Age calulator 4 | 5 | Why 6 | Simple example practicing what we have learned 7 | 8 | How 9 | See class 10 | */ 11 | 12 | #include 13 | #include 14 | #include "agecalc.h" 15 | 16 | void print(AgeCalc &calc) 17 | { 18 | qInfo() << calc.name() << "Human Years:" << calc.humanYears(); 19 | qInfo() << calc.name() << "Dog Years:" << calc.dogYears(); 20 | qInfo() << calc.name() << "Cat Years:" << calc.catYears(); 21 | } 22 | 23 | int main(int argc, char *argv[]) 24 | { 25 | QCoreApplication a(argc, argv); 26 | 27 | AgeCalc bryan; 28 | AgeCalc tammy; 29 | 30 | bryan.setName("Bryan"); 31 | bryan.setAge(46); 32 | tammy.setName("Tammy"); 33 | tammy.setAge(27); 34 | 35 | print(bryan); 36 | print(tammy); 37 | 38 | return a.exec(); 39 | } 40 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-8-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-8-assign 18 | main.cpp 19 | cat.h 20 | cat.cpp 21 | ) 22 | target_link_libraries(qt6cb-8-assign Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-assign/cat.cpp: -------------------------------------------------------------------------------- 1 | #include "cat.h" 2 | 3 | Cat::Cat(QObject *parent) : QObject(parent) 4 | { 5 | 6 | } 7 | 8 | void Cat::meow() 9 | { 10 | for(int i = 0; i < 3; i++) 11 | { 12 | qInfo() << "meow"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-assign/cat.h: -------------------------------------------------------------------------------- 1 | #ifndef CAT_H 2 | #define CAT_H 3 | 4 | #include 5 | #include 6 | 7 | class Cat : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Cat(QObject *parent = nullptr); 12 | 13 | void meow(); 14 | 15 | signals: 16 | 17 | }; 18 | 19 | #endif // CAT_H 20 | -------------------------------------------------------------------------------- /section 8/qt6cb-8-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Use a QObject without copying it 4 | 5 | Why 6 | QObjects can not be copied! 7 | 8 | How 9 | See below 10 | */ 11 | 12 | #include 13 | #include "cat.h" 14 | 15 | void do_fail(Cat cat) 16 | { 17 | cat.meow(); 18 | } 19 | 20 | void do_ptr(Cat *cat) 21 | { 22 | cat->meow(); 23 | } 24 | 25 | int main(int argc, char *argv[]) 26 | { 27 | QCoreApplication a(argc, argv); 28 | 29 | Cat kitty; 30 | //do_fail(kitty); 31 | 32 | do_ptr(&kitty); 33 | 34 | return a.exec(); 35 | } 36 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-1/qt6cb-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 9/qt6cb-9-1/qt6cb-9-1.png -------------------------------------------------------------------------------- /section 9/qt6cb-9-1/qt6cb-9-1.xml: -------------------------------------------------------------------------------- 1 | 3ZdRb5swEMc/DY+RDBdI8tiQ0mnSpEmRtr1aYIJVg6kxDdmnnwkGQkzGpoWqK5Ei88e+M7877sACP62eBM6TLzwizHJQVFmwsxxntXbUfy2cGsF2bbtRDoJGWuuFPf1JtIi0WtKIFIOJknMmaT4UQ55lJJQDDQvBj8NpMWdDrzk+EEPYh5iZ6ncayaRR1y7q9U+EHpLWs430lRS3k7VQJDjixwsJHi3wBeeyGaWVT1gNr+XSrAtuXO02Jkgm/2TBaZMuHn48lS8vcV59xlW28L8tdHheMSv1DevNylNLQPAyi0htBFmwPSZUkn2Ow/rqUcVcaYlMmTqz1TCmjPmccXFeC9vzT+naDRGSVDf3b3dUVDoRnhIpTmqKXgCa42mYIMc+KqtWSy4iAp4Wsc6EQ2e5h6UGmtdfsLM3Bjyf4aIwCE4ww0XeZG5Mq5rzNcQg2G08r9Z5JvUT4izvA3U1hLo0ocIoVHsuqI6ZkUGZhZLy7N5cEQrUMQ/XrgxosJ4J1nFHwHbi/cGCAXbLePh8b6qg8hVgJqrOkOraNamiMapoNqredAFVhT+vhzEj1UPdkhQMkkV6uAvrmkHD39bRIKiT9SZUEhlNbBLpBbOxRGw1QRiW9HVofgyj9vCVU+X4VtGG9VUgCl6KkOhFl83ryo67mTAksTgQaRg6B7W763+Is1nrLQiMUCtL6sWETPfJ6ZqP1NEGXDuw53mqwHMHbBcjrdUbSZHZGivY/39jXaL31lnhY3TWJby3zgofoLMu3bfrrOq0/+ppCnT/7QiPvwA= -------------------------------------------------------------------------------- /section 9/qt6cb-9-1/readme.txt: -------------------------------------------------------------------------------- 1 | What 2 | What is scope 3 | 4 | Why 5 | Scope helps avoid naming collisions and data corruption 6 | 7 | How 8 | Drawing 9 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-2/qt6cb-9-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 9/qt6cb-9-2/qt6cb-9-2.png -------------------------------------------------------------------------------- /section 9/qt6cb-9-2/qt6cb-9-2.xml: -------------------------------------------------------------------------------- 1 | 3ZZdb4IwFEB/DY8mtBWFR0VxWbInk22vnVRoVrhY6sD9+pVREIJmW6LGLCGEntsvzr0pWMRPypWkWfwEIRMWtsPSIgsL46mL9b0ChxqMEapBJHlYow5Y809moG3onocs73VUAELxrA83kKZso3qMSglFv9sWRH/VjEZsANYbKob0hYcqrqnr2Ef+wHgUNysj20QS2nQ2II9pCEUHkaVFfAmg6qek9Jmo3DVe6nHBmWi7MclS9ZsBBy8ZzV5X+91um5WPtExH/vNoPKmn+aBib97Y7FYdGgUS9mnIqlmQReZFzBVbZ3RTRQudc81ilQgTzpWE91aVo8kWUmXyityqzYXwQYDUIIVU87nZA5OKlWffDrXOdK0xSJiSB93FDHAa76bOJqZZHJOGiWFxJ2GkGUdNoUTt1EeX+sHo/Ita55+oxY5zZ2qRN1RLZvryqRo4/sEqzbP63NjysspET6KFSRAsvMnklOyqbZZBF9A87hdwe5B0NCP3hOYWXr6CyUDzHN6uZppo1553A9PYvT/V44HqXIVXU23b0yAIbqDawTdUrZvHz+l3rPNPQpZf -------------------------------------------------------------------------------- /section 9/qt6cb-9-2/readme.txt: -------------------------------------------------------------------------------- 1 | What 2 | Why do we need scope 3 | 4 | Why 5 | Give an example of a naming collision 6 | Give an example of data corruption 7 | 8 | How 9 | Drawing 10 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-3/qt6cb-9-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/voidrealms/qt6-core-beginners/5cc16ab40f0f4b473293ef5ebc97cb54814ae595/section 9/qt6cb-9-3/qt6cb-9-3.png -------------------------------------------------------------------------------- /section 9/qt6cb-9-3/qt6cb-9-3.xml: -------------------------------------------------------------------------------- 1 | 3ZZdb4IwFEB/DY8mtBWFR0VxWbInk22vnVRoVrhY6sD9+pVREIJmW6LGLCGEntsvzr0pWMRPypWkWfwEIRMWtsPSIgsL46mL9b0ChxqMEapBJHlYow5Y809moG3onocs73VUAELxrA83kKZso3qMSglFv9sWRH/VjEZsANYbKob0hYcqrqnr2Ef+wHgUNysj20QS2nQ2II9pCEUHkaVFfAmg6qek9Jmo3DVe6nHBmWi7MclS9ZsBBy8ZzV5X+91um5WPtExH/vNoPKmn+aBib97Y7FYdGgUS9mnIqlmQReZFzBVbZ3RTRQudc81ilQgTzpWE91aVo8kWUmXyityqzYXwQYDUIIVU87nZA5OKlWffDrXOdK0xSJiSB93FDHAa76bOJqZZHJOGiWFxJ2GkGUdNoUTt1EeX+sHo/Ita55+oxY5zZ2qRN1RLZvryqRo4/sEqzbP63NjysspET6KFSRAsvMnklOyqbZZBF9A87hdwe5B0NCP3hOYWXr6CyUDzHN6uZppo1553A9PYvT/V44HqXIVXU23b0yAIbqDawTdUrZvHz+l3rPNPQpZf -------------------------------------------------------------------------------- /section 9/qt6cb-9-3/readme.txt: -------------------------------------------------------------------------------- 1 | What 2 | Scope vs namespace 3 | 4 | Why 5 | Give an example of a naming collision 6 | Give an example of data corruption 7 | 8 | How 9 | Drawing 10 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-4/readme.txt: -------------------------------------------------------------------------------- 1 | What 2 | Lexical scope 3 | 4 | Why 5 | Lexical scoping (sometimes known as static scoping ) is a convention used with many programming languages that sets the scope (range of functionality) of a variable so that it may only be called (referenced) from within the block of code in which it is defined. The scope is determined when the code is compiled. 6 | 7 | How 8 | https://www.geeksforgeeks.org/static-and-dynamic-scoping/ 9 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-5/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-5 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-5 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-9-5 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-5/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Function scope 4 | 5 | Why 6 | Functions have their own scope, but share with their parent scope 7 | Understanding Lexical scope 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | 17 | void test(int number) 18 | { 19 | //Scope 20 | number = 50; 21 | qInfo() << "2 - Number: " << &number << " = " << number; 22 | } 23 | 24 | int main(int argc, char *argv[]) 25 | { 26 | //Scope 27 | QCoreApplication a(argc, argv); 28 | 29 | int number = 75; 30 | qInfo() << "1 - Number: " << &number << " = " << number; 31 | test(number); 32 | 33 | bool ok = true; 34 | if(ok) 35 | { 36 | //Scope 37 | int number = 1000; //This will haunt you!!! 38 | qInfo() << "3 - Number: " << &number << " = " << number; 39 | } 40 | 41 | qInfo() << "4 - Number: " << &number << " = " << number; 42 | 43 | return a.exec(); 44 | } 45 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-6/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-6 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-6 18 | main.cpp 19 | animal.h 20 | animal.cpp 21 | ) 22 | target_link_libraries(qt6cb-9-6 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-6/animal.cpp: -------------------------------------------------------------------------------- 1 | #include "animal.h" 2 | 3 | Animal::Animal(QObject *parent, QString name) : QObject(parent) 4 | { 5 | this->name = name; 6 | qInfo() << "Animal name param: " << &name << " = " << name; 7 | qInfo() << "Animal name : " << &this->name << " = " << this->name; 8 | } 9 | 10 | void Animal::sayHello(QString message) 11 | { 12 | //Both the same!!! 13 | qInfo() << message << " from " << name << " at " << &name; 14 | qInfo() << message << " from " << this->name << " at " << &this->name; 15 | } 16 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-6/animal.h: -------------------------------------------------------------------------------- 1 | #ifndef ANIMAL_H 2 | #define ANIMAL_H 3 | 4 | #include 5 | #include 6 | 7 | class Animal : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Animal(QObject *parent = nullptr, QString name = ""); 12 | 13 | QString name; 14 | void sayHello(QString message); 15 | signals: 16 | 17 | }; 18 | 19 | #endif // ANIMAL_H 20 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-6/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Scope in classes 4 | 5 | Why 6 | Classes have their own scope 7 | Classes do not share scope (unless its a static variable) 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include "animal.h" 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | QCoreApplication a(argc, argv); 21 | 22 | QString name = "Bryan"; //QString is NOT a QObject 23 | qInfo() << "My name is at: " << &name << " = " << name; 24 | 25 | // Animal cat(&a,"Fluffly"); 26 | // Animal dog(&a,"Fido"); 27 | Animal person(&a,name); 28 | 29 | person.sayHello("Hola"); 30 | 31 | // cat.name = "My Cat"; 32 | // dog.name = "My Dog"; 33 | 34 | // qInfo() << cat.name; 35 | // qInfo() << dog.name; 36 | 37 | 38 | 39 | 40 | return a.exec(); 41 | } 42 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-7/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-7 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-7 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-9-7 Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-7/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Global scope 4 | 5 | Why 6 | Some people just want to watch the world burn 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | 16 | QString name = "Bryan"; 17 | 18 | void testing() 19 | { 20 | qInfo() << name; 21 | } 22 | 23 | int main(int argc, char *argv[]) 24 | { 25 | QCoreApplication a(argc, argv); 26 | 27 | name = "Bob"; 28 | qInfo() << name; 29 | 30 | bool test = true; 31 | if(test) 32 | { 33 | QString name = "Tammy"; 34 | qInfo() << name; 35 | qInfo() << ::name; 36 | } 37 | 38 | qInfo() << name; 39 | testing(); 40 | 41 | return a.exec(); 42 | } 43 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-8/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-8 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-8 18 | main.cpp 19 | animal.h 20 | animal.cpp 21 | ) 22 | target_link_libraries(qt6cb-9-8 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-8/animal.cpp: -------------------------------------------------------------------------------- 1 | #include "animal.h" 2 | 3 | Animal::Animal(QObject *parent) : QObject(parent) 4 | { 5 | count++; 6 | } 7 | 8 | Animal::~Animal() 9 | { 10 | count--; 11 | } 12 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-8/animal.h: -------------------------------------------------------------------------------- 1 | #ifndef ANIMAL_H 2 | #define ANIMAL_H 3 | 4 | #include 5 | #include 6 | 7 | class Animal : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Animal(QObject *parent = nullptr); 12 | ~Animal(); 13 | 14 | static QString name; 15 | static int count; 16 | 17 | signals: 18 | 19 | }; 20 | 21 | #endif // ANIMAL_H 22 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-8/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Static scope in classes 4 | 5 | Why 6 | We want all classes to use them same variable 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include "animal.h" 16 | 17 | int Animal::count = 0; 18 | QString Animal::name = ""; 19 | 20 | void test() 21 | { 22 | Animal cat; 23 | Animal dog; 24 | Animal fish; 25 | qInfo() << dog.count; 26 | 27 | cat.name = "Gamer"; 28 | dog.name = "MuddPie"; 29 | 30 | qInfo() << "Cat:" << cat.name; 31 | 32 | //Deconstruction here! 33 | } 34 | 35 | int main(int argc, char *argv[]) 36 | { 37 | QCoreApplication a(argc, argv); 38 | 39 | test(); 40 | qInfo() << Animal::count; 41 | 42 | return a.exec(); 43 | } 44 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-9/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-9 LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-9 18 | main.cpp 19 | test.h 20 | test.cpp 21 | ) 22 | target_link_libraries(qt6cb-9-9 Qt${QT_VERSION_MAJOR}::Core) 23 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-9/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Static functions in classes 4 | 5 | Why 6 | We want to put a function in a class, but dont want to create a class 7 | WHAT MADDNESS IS THIS?!?!??!? 8 | 9 | How 10 | See below 11 | */ 12 | 13 | 14 | #include 15 | #include 16 | #include "test.h" 17 | 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | QCoreApplication a(argc, argv); 22 | 23 | // Test t; 24 | // t.doStuff(); 25 | // t.doOtherStuff(); 26 | 27 | Test::doOtherStuff(); 28 | 29 | return a.exec(); 30 | } 31 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-9/test.cpp: -------------------------------------------------------------------------------- 1 | #include "test.h" 2 | 3 | Test::Test(QObject *parent) : QObject(parent) 4 | { 5 | qInfo() << this << "Constructed"; 6 | } 7 | 8 | void Test::doStuff() 9 | { 10 | qInfo() << this << "doStuff"; 11 | Test::doOtherStuff(); 12 | } 13 | 14 | void Test::doOtherStuff() 15 | { 16 | //"this" does not exists 17 | //qInfo() << this << "doOtherStuff"; 18 | //doStuff(); //No instance can not call the other function 19 | 20 | //We can still run code without an instance! 21 | qInfo() << "doOtherStuff"; 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-9/test.h: -------------------------------------------------------------------------------- 1 | #ifndef TEST_H 2 | #define TEST_H 3 | 4 | #include 5 | #include 6 | 7 | class Test : public QObject 8 | { 9 | Q_OBJECT 10 | public: 11 | explicit Test(QObject *parent = nullptr); 12 | 13 | void doStuff(); 14 | static void doOtherStuff(); 15 | 16 | signals: 17 | 18 | }; 19 | 20 | #endif // TEST_H 21 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-assign/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.14) 2 | 3 | project(qt6cb-9-assign LANGUAGES CXX) 4 | 5 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 6 | 7 | set(CMAKE_AUTOUIC ON) 8 | set(CMAKE_AUTOMOC ON) 9 | set(CMAKE_AUTORCC ON) 10 | 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) 15 | find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) 16 | 17 | add_executable(qt6cb-9-assign 18 | main.cpp 19 | ) 20 | target_link_libraries(qt6cb-9-assign Qt${QT_VERSION_MAJOR}::Core) 21 | -------------------------------------------------------------------------------- /section 9/qt6cb-9-assign/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | What 3 | Practice using scope 4 | 5 | Why 6 | Programs are full of scope 7 | 8 | How 9 | See below 10 | */ 11 | 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | int addTen(int age) 18 | { 19 | return age + 10; 20 | } 21 | 22 | void dogyears(int value) 23 | { 24 | int age = value * 7; 25 | qInfo() << "Age in dog years: " << age; 26 | } 27 | 28 | int main(int argc, char *argv[]) 29 | { 30 | QCoreApplication a(argc, argv); 31 | 32 | int age = 0; 33 | qInfo() << "Enter your age in years:"; 34 | std::cin >> age; 35 | 36 | age = addTen(age); 37 | 38 | qInfo() << "Ten: " << age; 39 | dogyears(age); 40 | 41 | 42 | return a.exec(); 43 | } 44 | --------------------------------------------------------------------------------