2. Basic C++ | QT C++ Syntax and Semantics

Basic QT C++ Syntaxes

 

Data type represents the basic type information for a basic element. The naming convention follows. For numeric types it is FLOAT, SIGNED, or UNSIGNED followed by the _BITS where BITS is the size of the data. BOOLEAN is a true / false (1,0) represented in an 8 bit container. The UNSIGNED variants with multiple bit definitions are for packed graphical data formats and represent vectors with per vector member sizes which are treated as a single unit for packing and alignment purposes. MATRIX the three matrix types contain FLOAT_32 elements and are treated as 32 bits for alignment purposes. RS_* objects. 32 bit opaque handles.

 

Basic Types & Qt Core Classes

 

  • Basic data types are normal C++ data types
  • int, bool, double, char etc.
  • Structs and arrays are created normally
  • Qt variants of most of the containers in the C++ Standard
  • Library
  • QList<T>
  • QVector<T>
  • QMap<T,C>
  • For String types, Qt holds its own type : QString
  • QDate, QDateTime : – Can be compared, converted to strings
  • QChar – 16-bit Unicode character
  • QString – Unicode character string. Can be resized, may contain 8-bit terminating strings or binary data
  • QByteArray - Used instead of QString, when memory conservation is important (Qt for embedded Linux)
  • QEventLoop, QEvent – Used to enter and exit event loop
  • QHash – Template providing a hash-table-based dictionar
  • QQueue – Template class implementing a FIFO queue
  • QPoint, QRect – Rectangle is defined using the top left and bottom right
  • QTimer – One shot or periodic 1 ms timer (accuracy depends on platform)
  • QVariant – Union of the common Qt types
  • QVector – Template class for dynamic arrays (flat), QLinkedList more efficient, if many insertion and deletion operations needed
  • Iterator classes – Java (QVectorIterator) and STL-like

 

Identifier Naming Rules

 

  • Can consist of upper and lower case letters, digits, dollar sign ($) and the underscore ( _ ) character.
  • Must begin with a letter, dollar sign, or an underscore
  • Are case sensitive
  • Keywords cannot be used as identifiers
  • Within a given section of your program or scope, each user defined item must have a unique identifier
  • Can be of any length.


QObject Class
 
  • Heart of Qt's object model
  • Base class for all object classes
  • So, all QWidgets are QObjects also
  • Provides object trees and object ownership
  • QObject's responsibility is to provide a central location for the most important concepts in Qt

 

Has three major responsibilities

 

  • Memory Management
  • Introspection (runtime identification of object types)
  • Event handling
 
Parent/Child Relationship

 

  • Each QObject instance may take a parent argument
  • Child informs its parent about its existence, upon which the parent adds it to its own list of children
  • If a widget object does not have a parent, it is a window
  • The parent does the following for its children: Hides and shows children, when hidden/shown itself
  • Enables and disables children when enabled or disabled itself
  • Note that a child may be explicitly hidden, although the parent is shown



Creating Objects

 

  • Objects inheriting from QObject are allocated on the heap using new
  • If a parent object is assigned, it takes ownership of the newly created object – and eventually calls delete
  • QLabel *label = new QLabel(”Hello World”, parent);
  • Objects not inheriting QObject are allocated on the stack, not the heap
  • QStringList list;
  • QColor color;

Exceptions

 

  • QFile and QApplication (inheriting QObject) are usually allocated on the stack
  • Modal dialogs are often allocated on the stack, too

 

Signals and Slots

 

  • Observer pattern
  • Type-safe callbacks
  • More secure than callbacks, more flexible than virtual
  • methods
  • Many-to-many relationship
  • Implemented in QObject

 

Signals

 

  • A signal is a way to inform a possible observer that something of interest has happened inside the observed class
  • A QPushButton is clicked
  • An asynchronous service handler is finished
  • Value of QSlider is changed
  • Signals are member functions that are automatically implemented in the meta-object
  • Only the function declaration is provided by the developer
  • Signal is sent, or emitted , using the keyword emit
  • emit clicked();
  • emit someSignal(7, “Hello”);

 

Slots

 

  • A slot is a function that is to be executed when a signal has been emitted.
  • (When QPushButton is pressed), close QDialog
  • (When service is ready), ask for the value and store it
  • (When QSlider value is changed), show a new value in QLCDNumber
  • A Slot function is a normal member function implemented by the developer

 

Signals and Slots

 

  • The signals and slots mechanism is fundamental to Qt programming. It enables the application programmer to bind objects together without the objects knowing anything about each other.
  • Slots are almost identical to ordinary C++ member functions.
  • The main difference is that they can be connected to a signal - in which case it is automatically called when the signal is emitted.
  • To setup the signal-slot connection, we must first define the connection.
Signals and Slots
.
The connect() statement looks like this:

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

Main features:

One signal can be connected to many slots

  • connect(slider, SIGNAL(valueChanged(int)),
    spinBox, SLOT(setValue(int)));
  • Many signals can be connected to the same slot
  • connect(lcd,,SIGNAL(overflow()))
  • this, SLOT(handleMathError()));
    connect(calculator, SIGNAL(divisionByZero()),
    this, SLOT(handleMathError()));
  • A signal can be connected to another signal
  • connect(lineEdit, SIGNAL(textChanged(const QString &)),
    this, SIGNAL(updateRecord(const QString &)));
  • .
  • Connections can be removed
    disconnect(lcd, SIGNAL(overflow()),
    this, SLOT(handleMathError()));
Exceptionally if a signal has more parameters than the slot it is connected to, the additional parameters are ignored

connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),