├── 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