QT5 Notizen

::textChanged(const QString &text)

Im Gegensatz zu ::textEdited(const QString &text) triggert textChanged() auch dann, wenn der Text programmatisch (also z.B. per setText()) verändert wird. Bei ::textEdited() triggert es nur, wenn der Anwender den Text im Feld editiert. Der Parameter ist in beiden Fällen der neue, geänderte Text.

QFileSystemWatches();

fw = new QFileSystemWatches(this);

QStorageInfo

C++14 verwenden

project.pro
CONFIG += c++14 QMAKE_CXXFLAGS += -std=c++14

Die QMAKE_CXXFLAGS werden empfohlen, weil qmake für manche Toolchains (z.B. clang) anscheinend die CONFIG in falsche Flags übersetzt (nämlich -std=c++11). Unklar, für welche Toolchains und bis zu welcher QT Version dieses Problem besteht.

SIGNALS und SLOTS

Wenn man händisch verknüpfte slots nutzt, dürfen die Funktionsnamen nicht mit "on_" beginnen, weil der automatische Mechanismus dieses Namensschema nutzt zum erkennen, welche slots verknüpft werden müssen ("on_quellobjekt_signal").

Es besteht sonst die Gefahr, dass Slots mehrfach aufgerufen werden.

Ohnehin ist das händische Verknüpfen per connect(object, signal, zielklasse, funktion); zuverlässiger, weil eine überprüfung zur Compiletime stattfindet. Wenn man z.B. einen Button umbenennt, gibt es sofort beim compilieren einen Fehler - per automatischer Methode ist der Button dann einfach funktionslos, es gibt keine Fehlermeldung.

Parameterübergabe eines QString

Falls der QString in der Funktion nicht verändert wird, übergibt man den QString am effizientesten so:

void my_func(QString const& text)

Deploy unter Windows

Zum deploy unter Windows habe ich mir eine .bat geschnitzt

proj-deploy.bat
call C:\Qt\5.15.2\msvc2019_64\bin\qtenv2.bat copy D:\nebula-build\build\nebula.exe D:\nebula-build\release cd D:\nebula-build\release D: windeployqt nebula.exe

Danach finden sich alle benötigten dll etc. im Verzeichnis release

Diverses

QGeoServiceProvider *provider = new QGeoServiceProvider("osm");
QGeoPositionInfoSource *source =
QListwidget
QFileDialog