
Explore what Qt 5 design patterns are, why we use them, and the course scope in section one, including conventions, pitfalls, and end-to-end workflow with raw, unfiltered demonstrations.
Present the heart of Q5 design patterns with a short, disclaimer and warnings section that contains no code and emphasizes not skipping this material.
Expect to tackle advanced topics that require C++ and Qt core knowledge. Recognize this is not a beginner course; prepare for a learning curve, independent research, and design pattern interconnections.
Explore common design patterns and practices used with Qt 5, with code examples and a focus on classes, interfaces, inheritance, polymorphism, file structure and streams.
The course targets advanced Qt 5 design patterns and omits hello world and basic QML topics, assuming you are an experienced programmer and prefer short, simple, focused lessons.
Explore how conventions and standards influence programming across Apple, Microsoft, and Google, and learn to apply fluid design patterns that adapt to any standard while solving problems.
Acknowledge that complex programming tasks will involve mistakes and disagreements, compare append, read-write, and write modes, and invite feedback to fix issues on GitHub.
Explore raw and unedited videos that reveal real-time problem solving, showing mistakes, mispronunciations, and the thought process behind overcoming challenges.
Design patterns provide reusable, well defined, proven solutions that simplify complex code and solve specific issues, making patterns easy to use across projects.
Explore why design patterns face constant change, and how to craft enduring solutions by using what works for your situation, aiming for designs that last amid evolving technology.
Access help through the Udemy course, join the Void Realms Facebook group for 24/7 open community support, and engage respectfully in the global programming community.
Explore the solid design principles—single responsibility, open/closed, Liskov substitution, interface segregation, and dependency inversion—alongside don't repeat yourself, encapsulation, access modifiers, the property system, and code deprecation.
Explains the single responsibility principle from SOLID, advocating a class that handles only temperature conversions. Demonstrates a temp converter for Celsius to Fahrenheit and back, using header-file to hide implementation.
Explains the open/closed principle and how software entities should be open for extension but closed for modification, using interfaces to future-proof components and enable easy swapping of implementations.
Explore Liskov substitution principle and design by contract, illustrating how substituting a TCP socket with an instance of its subtype can break behavior, and why interfaces help prevent such errors.
Explore the dependency inversion principle, focusing on abstractions rather than concretions. See how high level modules should not depend on low level modules, using interfaces and simple oven examples.
Promotes the keep it simple (kiss) principle in Qt design patterns, arguing that simpler interfaces beat unnecessary complexity and avoiding patterns you don't need.
Learn how dry principles prevent repetition by using interfaces as contracts, composing a fridge and radio with minimal duplication and interchangeable parts.
Explore how Qt access modifiers—private, public, and protected—shape member visibility, with signals and slots in a TCP server, and how deleting pointers can cause failures when inheriting.
Learn how encapsulation protects data by combining data members and functions into a class with private and public sections, preventing direct access, uninitialized variables, and misuse.
Explore the Qt property system in QML, learn how the cube property defines getters, setters, reset, and notify signals, and see end-to-end integration with C++ and QML for encapsulation.
Explore the full life cycle of a deprecated function, from old code to a new approach with warnings. Learn to implement deprecation notices and pragma messages to guide upgrades.
Explore exception safety in design patterns, examining levels such as no safety, basic safety, strong, and no throw guarantee, along with their caveats and pitfalls.
Examine exception safety, focusing on no safety, and reveal how unsafe parsing, null pointers, and broken input handling can crash programs.
Demonstrates basic exception safety in Qt 5 design patterns by weighing safety guarantees against memory costs and applying practical input validation, null checks, and length limits to prevent crashes.
Learn how strong exception safety prevents memory leaks and preserves program state when a function goes out of scope, moving from basic safety toward safer error handling with try-catch.
Rewrite legacy code to enforce a no throw guarantee by returning bools, validating input, and avoiding exceptions, while choosing between insert or append and handling errors gracefully.
Explore memory concepts in Qt 5 design patterns, including stack and heap, memory leaks, stale pointers, parent-child relationships, and memory management with raii and smart pointers.
Explore the stack memory model in C++ within Qt, why objects cannot be copied due to the disabled copy constructor, and when to use pointers or references for proper lifetimes.
Explore the heap, the free store, and memory management, then see how pointers enable fast references and why copying large objects is expensive.
Master memory management in Qt 5 by addressing memory leaks and dangling pointers in non-copyable objects, then use delete all and clear to safely free heap memory.
Explore the Qt 5 parent-child memory management pattern, where a parent owns and destroys its children, and learn to create, list, cast, and find them.
Demonstrate how raii guides resource allocation during object creation and release during destruction in a multithreaded tcp server using a thread pool.
Master memory management with QScopedPointer and QScopedPointerArray, binding lifetimes to scope and auto-deleting objects. Learn about the custom deleter and handling arrays and lists safely.
Demonstrate how shared pointers safely share objects across threads in Qt 5, using mutex locker and a runnable with a thread pool.
Explore smart pointers in the C++ standard library, focusing on unique_ptr and shared_ptr, ownership transfer, null pointers, and reference counting with the use count.
Explore signals and slots as the bedrock of Qt development, dive into connecting and disconnecting, and learn how an auto connection class streamlines signals, slots, and related libraries.
Discover signals and slots in Qt through a producer–consumer example and see how the meta-object compiler generates behind-the-scenes code.
Discover how to disconnect a timer from its slot to stop unwanted signals, using a simple alarm example with a global timer and slots in Qt 5 design patterns.
Learn auto connecting signals and slots in Qt by building an auto connect class that scans meta objects to map sender signals to receiver slots.
Explore the sender function in a Qt tcp chat server, using signals and slots to broadcast messages to all clients and manage socket lifetimes with delete and delete later.
This lecture explains signals and slots in Qt 5, detailing auto, direct, queued, blocking queued, and unique connections, with demonstrations and notes on deadlock risk and when to use each.
discover how to implement and export signals and slots in a Qt 5 shared library, and connect them to an application client with proper build order.
Explore threading in Qt 5 design patterns, learn to inherit a thread, move a queue object to another thread, use the thread pool, and implement threading in widget and applications.
Examine inheriting QThread in the Qt 5 design patterns lecture and learn why this Java-style approach is not the best idea; discover moving objects to threads as the safer pattern.
Learn the correct way to move an object to a QThread using move to thread, signals and slots, and proper memory management, avoiding inheritance and cross-thread pitfalls.
Learn how to use QThreadPool to run runnables in a pool of threads, reuse threads, manage signals and slots across threads, and understand auto delete implications.
Leverage Qt Concurrent’s high level APIs to run a function in a thread pool, returning a future and keeping the main thread responsive with signals and slots.
Explains updating a Qt widgets GUI from a worker thread, using a runnable in a thread pool, signals and slots, and a timer to throttle updates to the main thread.
Learn to reuse a Qt widgets file scanner in QML by wiring a thread pool, signals and slots, and a timer to keep the GUI responsive during scanning.
Explore the template-focused content of section seven in five design patterns by examining issues with objects and templates, template classes, and how to use smart pointers inside templates.
Discover how templates implement generics in C++ and how a simple Add function reveals copy constructor challenges and the need to encapsulate a value for generic types.
Explore placing templated code inside a class to work around a deleted copy constructor in QObjects, and show how templates still operate with a queue object.
Explore the risks of using QObjects in templates in Qt 5 design patterns, learn to distinguish queue objects from normal c++ classes, and implement safe checks to avoid template madness.
Investigate how Qt template classes and copy constructors can create memory issues. Learn to use pointers and safe memory practices to manage lists and prevent leaks.
Explores using shared pointers with templated classes to manage memory automatically, wrapping class instances in a queue or list and avoiding manual deletion.
Explore creational design patterns across languages, including abstract factory, builder, factory method, object pools, prototypes, and magic statics, to learn object creation and reuse.
The abstract factory is a creational pattern that creates related items through interfaces, using i animal and i animal factory concepts to generate small, medium, and large cats.
Master the builder design pattern by orchestrating a client, director, and builder to construct a complex object step by step, using interfaces and a life cycle demonstrated with burger examples.
Explore the factory method, which defines an interface for creating an object and lets a function decide whether to return a short delay or a long delay using a timer.
The object pool design pattern reuses objects to save resources and boost performance, using acquire and release to manage items, similar to a thread pool.
Explore the prototype design pattern, a creational approach that copies a prototype to create new objects via a cloneable interface, avoiding the new operator.
Discover why the singleton pattern is phased out and how c++11 magic statics offer a single instance. Grasp threading risks like deadlocks and race conditions and the get_instance approach.
Explore structural design patterns in Qt 5, including adapter, bridge, composite, decorator, and flyweight, and learn how these industry standards apply across languages and frameworks.
Explore the adapter design pattern by wrapping a legacy file logger to convert its interface and add date-time prefixes, enabling incompatible classes to work together.
Explore the bridge design pattern, which decouples an abstraction from its implementation using an interface so two objects can vary independently, enabling easy logger swaps.
Explore the composite design pattern through a parent-child object hierarchy and tree structure, using a school with teachers and students to demonstrate memory management and traversal.
Explore the decorator design pattern, which attaches new responsibilities to an object by wrapping it with successive decorators, such as bold and italic text, for flexible text processing.
Explore the facade design pattern by wrapping a complex hotel booking subsystem with a simple interface to book room, hiding bookings, housekeeping, and maintenance from the client.
Explore the flyweight pattern by modeling a coffee shop where a shared menu of a thousand items reduces memory usage, while multithreaded orders run in parallel.
Explore behavioral design patterns, including chain of responsibility, command, interpreter, iterator, mediator, memento, null object, strategy, template method, and visitor, to understand how programs behave.
Learn how to implement the chain of responsibility with a password validator, linking length, number, and special validators through check and check next to validate passwords.
Apply the command design pattern by encapsulating a request as an object, triggering it later, and using an order interface to buy or sell through a broker.
Apply the interpreter design pattern to translate strings into numbers using simple, direct logic. Keep the approach minimal and avoid overengineering, demonstrating hex and base-10 conversions in practical examples.
Learn the iterator design pattern, enabling sequential access to a collection without exposing its underlying representation. Explore Qt containers—list, vector, set, hash, map—and their begin and end iterators.
Explore the mediator design pattern in Qt 5, which encapsulates how a set of objects interact to promote loose coupling, with signals and slots serving as its direct replacement.
Explore the memento design pattern, capturing an object's internal state via a checkpoint while preserving encapsulation, then demonstrate commit, rollback, and add transaction for undo and state restoration.
recognize that the null object pattern is controversial due to broad interpretation and potential overengineering; when no object exists, adopt a clear default behavior: do nothing or safe logging.
Explore the observer pattern as a one to many dependency where state changes trigger notifications to dependents, illustrated by an auction with bids and signals and slots.
Explore the state design pattern and how an object's internal state drives behavior, revealing how it seems to change its class, with a traffic light example.
Explore the strategy design pattern, which defines a family of interchangeable algorithms via an interface. See how different workers implement the same interface—ai, construction, office, and surgeon—gluing the system together.
Learn how the template method defines an algorithm skeleton in a base class, with placeholders implemented by derived classes via inheritance. Compare it with strategy and factory method variants.
Explore the visitor design pattern in depth, including double dispatch, accept and visit mechanics, and practical examples like a cab company and a shopping cart.
This is an advanced course that covers design patterns using Qt 5 and C++. It is strongly advised you do not attempt this course until you have completed all the prerequisites -see my other courses on Udemy if you need a refresher.
Awarded Content Creator in the 2020 Qt Champion Awards:
"Bryan has a few courses available on Udmey, specifically his course on Qt 5 Design Patterns and also has a popular group on Facebook which helps others with their Qt questions as well. For his work alone in creating the Qt 5 training course online for everyone to benefit from it was easy to make him our year's Content Creator."
In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design - a design pattern is not a finished application but rather a tool the developer can use across any software framework. Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. Reusing design patterns helps to prevent subtle issues that can cause major problems and improves code readability for coders and architects familiar with the patterns.
The goal of this course is to teach the student how to use design patterns in Qt 5 with C++ along with an understanding of issues specific to Qt 5. We will use a wide range of Qt technologies from Widgets, QML, sockets, server, threading, io, streams, processes, and the State Machine Framework. This course will cover traditional design patterns along with looking at common problems and solutions specific for Qt 5.
These videos are filmed live and unedited, the student will see every single step, mistake and correction - the result is the same as if sitting in a classroom watching in real time.