
Explore how threads relate to processes and the cpu's cores, and how the os schedules threads for multithreaded execution. Inspect the current thread, thread sleep, and thread control.
Demonstrates how to create and move objects to a separate thread in Qt, start timers, and manage threads with signals and slots and shared pointers.
Learn why inheriting QThread is discouraged in Qt 5 core with C++, and adopt the move approach or runnable interfaces with signals and slots for safe threading.
Explore multithreading in Qt by creating a counter on multiple threads managed by a thread manager, moving objects to threads, and coordinating with signals and slots, while avoiding common pitfalls.
Explore the Qt thread pool design by implementing a runnable class, enabling auto-deleted tasks, thread reuse, and safe background execution within a Qt 5 core advanced C++ context.
Understand the mutex concept and how it prevents race conditions. Explore how locking and unlocking enforce mutual exclusion, with non-recursive versus recursive mutex behavior.
Learn how a counter is safely updated across threads using a mutex and QMutexLocker in a Qt thread pool, and see the consequences of missing locks.
Learn how semaphores generalize mutexes by allowing multiple acquisitions and controlled resources, then use a thread pool to queue work and acquire and release resources for each item.
Explore the wait condition and producer–consumer pattern in Qt 5 core with C++. Coordinate a buffer, mutex, and signals and slots to synchronize producer and consumer threads.
Explore signals and slots in threaded apps, comparing direct, queued, and auto connections, and learn to explicitly use a connection to route signals to the correct thread.
Explore QtConcurrent's high level APIs for asynchronous multithreading, using futures and blocking maps to map a function over a list and run tasks in parallel.
Explore using QtConcurrent::run to execute a test function on a thread pool, returning a future and showing the main thread and pool thread running asynchronously.
Explore a QtConcurrent issue in C++, a conversion pitfall when passing a name to a test function, and how an array initializer must be initialized as list or string literal.
Explore using a future watcher with Qt 5 Core to run concurrent map operations on a list, multiply values, and wait for finished to observe results.
Learn how to extract values from QFuture using mapped futures, using const int, and leverage future watcher to run asynchronous operations in the background.
Explore how QFutureWatcher encapsulates futures with signals and slots to track lifecycle and per-item progress in an asynchronous map, enabling real-time updates in a graphical user interface.
Explore iterating over futures in Qt 5 core with C++, using Java-style future iterators, index-based loops, and for-each patterns; there's no single correct method, only preference.
Learn how the QFutureSynchronizer coordinates multiple threads to simplify synchronization by adding tasks to a synchronizer and waiting for completion, avoiding a future watcher.
Build a command line interface that starts and stops multiple threads using a worker and a manager, with signals and slots and a background event loop.
Explore how IP addresses, IPv4 and IPv6, and DNS queries enable internet communication from local loopback to global networks. Use nslookup and trace route to test and troubleshoot applications.
Learn to enumerate all local IP addresses with Qt 5 using QHostAddress, QNetworkInterface, and AbstractSocket; distinguish IPv4/IPv6, loopback, and multicast within the OSI model.
Explore UDP networking in Qt through sending and receiving datagrams with QUdpSocket, binding to a port, and broadcasting data while contrasting UDP's connectionless model with TCP's connection-oriented approach.
Explore a real-world UDP chat app in Qt 5 core C++. Run a command line interface and chat module on separate threads. Bind to a shared port and broadcast datagrams.
Examine how TCP sockets establish reliable connections via a three-way handshake, with abstract sockets, DNS lookups, and HTTP requests in a client–server model.
Learn how to connect to and configure a proxy using QNetworkProxy, choosing per-socket or per-application scope, with http proxies and optional authenticators, and see how requests appear from the proxy.
Secure a proxy connection with QSslSocket in Qt 5 Core Advanced with C++. Learn to read SSL certificates, enable start of encryption, and wire signals and slots for pre-shared authentication.
Demonstrates synchronous TCP in Qt 5 Core Advanced with C++, blocking the app while connecting to port 80, sending an HTTP request, and reading the full server response.
Learn to implement synchronous udp communication by binding sockets with share address, broadcasting datagrams, and handling send and read cycles using a network datagram in Qt 5 core advanced.
Learn to use QNetworkAccessManager to perform HTTP get and post requests, manage headers and mime types, and handle responses asynchronously with signals and slots.
Qt 5 core advanced with C++ network access manager for FTP file transfers, distinguishing POST from PUT, and implementing upload and download with signals, slots, and progress tracking.
Explore how Qt's TCP server framework enables simple, event-driven networking: bind to a port, listen on any address, handle new connections, read data, and manage disconnections with signals and slots.
Build a multi-threaded tcp server with a thread pool, handling each connection on a separate thread using Qt's QTcpServer, QTcpSocket, and QRunnable patterns, demonstrating http 1.1 responses.
Master multi-threaded tcp server testing with siege to measure concurrency, throughput, and longest transactions, while understanding Linux ulimit limits and 255 concurrent connection caps.
Learn to secure a tcp server with an ssl socket by creating a self-signed certificate using open ssl, including rsa key, certificate signing request, and a server certificate.
Build a scaled ssl server in Qt by loading the server certificate and private key, handling incoming connections with ssl sockets, and returning an http-style hello world response.
Learn how to test an ssl connection using OpenSSL s_client on a local loopback, verify certificate chains, and understand self-signed certificates and browser warnings.
describes how an executable uses preprocessing, compilation, and linking, then contrasts static and shared libraries for code reuse, including symbol export/import and runtime dependency considerations.
The lecture demonstrates code reuse by using an external library in a separate project, configuring include and depend paths, distributing headers, and addressing runtime library location on the operating system.
Explains how shared libraries can depend on other libraries in a Qt 5 core advanced C++ project, illustrating a widget library that requires the network library and proper include paths.
Compare static libraries with shared libraries; a static lib bakes into the executable as a .a file, offering simpler deployment but larger binaries.
Learn how Qt plugins work as shared libraries with a defined interface, differentiating high level and low level extensions, and implement a generic plugin factory to load them.
Declare a plugin interface and load it at runtime with Q plugin loader, handling library loading, unloading, and safe casting to the interface within a shared library.
Learn how to use a third-party library by rebuilding it, selecting release vs debug, and correctly include headers, set library paths, and link the proper library files.
Explore a universe of C++ libraries, including Boost and cute, from 3D graphics to real-time communications, and learn to reuse third-party code instead of reinventing the wheel.
Explore the relational database model by building tables, defining primary keys, and using SQL with phpMyAdmin and MySQL; create a users table and perform insert, select, and delete operations.
Explore loading and testing a Qt SQL plugin with QPluginLoader, resolving lib MySQL dependencies, and establishing a database connection using host, name, user, and password.
Explore the Qt 5 core QSqlDriver and its modular drivers like sqlite, mysql, odbc, and sql. Inspect features such as transactions, query size, blob, prepared queries, and last insert id.
Use QSqlDatabase and QSqlQuery to connect to MySQL, query the Void Realms database's Users table, filter by age, iterate results with next, and handle errors.
Build a data class in Qt 5 Core with begin, commit, rollback transactions, and open, load, save, remove, using insert/update logic with parameter binding.
Discover how to implement unit testing in Qt using Qt Test, with private slots, init and cleanup hooks, and signal spy to verify behavior and results.
Examine the Qt 5 core advanced with C++ test lifecycle in a basic setup, focusing on init test case, init cleanup, and private slots for per-test and shared resource management.
Explore how to design and run tests in a Qt 5 core advanced C++ context by creating a widget, using fail and verify macros, and validating age constraints.
Explore data-driven tests in Qt 5 core with C++, using a data container for name and age, generating rows, and fetching values to validate age rules.
Learn to benchmark code in a bare-bones Qt app, using a test main and benchmarking blocks to measure execution time, compare for versus for each, and report iterations.
Explore how to deploy Qt applications by distinguishing debug and release builds, choosing kits, and understanding static versus shared linking, with platform-specific packaging considerations for Mac, Windows, and Linux.
Qt 5 core advanced apps on macOS by creating a self-contained app bundle with frameworks, packaging into a DMG, and running from the terminal.
Deploy a Qt 5 core app on Linux using Linux Deploy and app image, wrapping dependencies into a self-contained binary for distribution across distros.
Explore the challenges and steps of static builds in Qt 5 core advanced with C++, including licensing caveats, building a self-contained executable, and optimizing size with upx.
Discover how the Qt installer framework supports Linux, macOS, and Windows, enabling highly customizable installers via a config and packages directory, XML files, seven zip archives, and a binary creator.
Explore two distinct Qt technology paths after mastering core concepts: rapid UI scripting with Qt Quick for cross-platform interfaces and the desktop-oriented widgets approach, with beginner to advanced guidance.
This is not a beginners course! This is a followup to the Udemy Qt 5 Core for beginners and intermediate users and picks up where they both left off. In this course you will learn how to work with threads, sockets, libraries, plugins, unit testing, and application deployment across multiple operating systems. This course overs Qt 5. Because Qt 6 has so many changes, I will re-record these lessons using Qt 6 and place them into a different course, check my instructor profile for updates.