DIGITAL
Qt ist ein Toolkit, das dabei hilft Programme (und insbesondere Programmoberflächen) plattformübergreifend zu entwickeln. Bei der richtigen Verwendung kann Ihr Programm nicht nur auf Windows und gängigen POSIX-Systemen, sondern mittlerweile auch auf Android, iOS, Windows Phone und eingebetteten Systemen ausgeführt werden.
In dieser Übersicht soll ein kleiner Teil von Qt (in seiner aktuellen Version Qt5.15) vorgestellt werden, der für die Lösung der Aufgaben ausreichen sollte.
QtCreator:
Wählen Sie beim Erstellen eines Projektes den Projekttyp: Application (Qt) -> Qt Widgets AApplication.
CMake:
Sofern Sie bereits mit CMake vertraut sind, ist das Bauen gegen Qt einfach durch target_link_libraries
möglich:
cmake_minimum_required(VERSION 3.0.2)
project(GuiProgramm)
find_package(Qt5Widgets REQUIRED)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_executable(GuiProgramm gui.cpp)
target_link_libraries (GuiProgramm Qt5::Widgets)
Bauen kann man dann wie mit Cmake üblich mit: cmake .; make
QMake:
QMake ist wie CMake ein Makefile-Generator, der jedoch für Qt spezialisiert ist.
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GuiProgramm
TEMPLATE = app
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++17
SOURCES += gui.cpp
Bauen kann man dann ähnlich wie mit Cmake mit: qmake .; make
Bevor Sie die Klassen aus Qt verwenden können, müssen Sie zuvor ein QApplication
-Objekt erstellen. Dieses kümmert sich darum, dass Kommandozeilenargumente an die GUI Ihres Programms richtig übergeben werden, Events/Interaktiv bearbeitet werden, Ihr Programm richtig initialisiert wird uvm.
#include <QtWidgets>
// argc bekommt die Anzahl der Kommandozeilenargumente übergeben,
// argv bekommt die Argument selbst übergeben
// Bsp.:
// Windows:
// abc.exe blub bla
// Linux/OS X:
// ./abc blub bla
// führt zu
// argc ist 3
// argv ist {"./abc", "blub", "bla"}
int main(int argc, char *argv[])
{
# Initialisierung des Programms und Ihrer GUI
QApplication app(argc, argv);
// ...
// Ihr Programmcode
// ...
// Starten der Ereignisschleife (engl. event loop; Abfangen von Klicken,
// Tippen, etc.) und beenden des gesamten Programms beim Beenden des Qt-Teils
// (dies geschieht standardmäßig beim Schließen aller Fenster).
// Diese beiden Schritte zu trennen ist innerhalb dieses Praktikums nicht nötig.
return app.exec();
}
Achtung: Vergessen Sie beim Testen nicht QApplication
zu initialisieren und am Ende auszuführen (app.exec()
). Falls Sie es vergessen, werden Sie unter Umständen ein schwarzes Fenster sehen, auf jeden Fall aber sind dann Ihre Interaktionsmöglichkeiten mit der Anwendung sehr beschränkt.
Hallo Welt Testen Sie den folgenden Code und versuchen Sie nachzuvollziehen, was geschieht:
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget w;
QLabel *l = new QLabel(&w);
l->setText("Hallo Welt!");
// Alternativ:
/* QLabel *l2 = new QLabel("Nochmals hallo!",&w); */
w.setGeometry(120,120,200,50);
w.move(100,300);
w.setWindowTitle("Tadaa, ein Fenster");
w.show();
return app.exec();
}