QCoreApplication Class
Die Klasse QCoreApplication bietet eine Ereignisschleife für Qt-Anwendungen ohne UI. Mehr...
Kopfzeile: | #include <QCoreApplication> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbt: | QObject |
Vererbt von: |
Eigenschaften
|
|
Öffentliche Funktionen
QCoreApplication(int &argc, char **argv) | |
virtual | ~QCoreApplication() |
(since 6.5) Qt::PermissionStatus | checkPermission(const QPermission &permission) |
void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
virtual bool | notify(QObject *receiver, QEvent *event) |
void | removeNativeEventFilter(QAbstractNativeEventFilter *filterObject) |
(since 6.5) void | requestPermission(const QPermission &permission, Functor &&functor) |
(since 6.5) void | requestPermission(const QPermission &permission, const QObject *context, Functor functor) |
Öffentliche Slots
Signale
void | aboutToQuit() |
void | applicationNameChanged() |
void | applicationVersionChanged() |
void | organizationDomainChanged() |
void | organizationNameChanged() |
Statische öffentliche Mitglieder
void | addLibraryPath(const QString &path) |
QString | applicationDirPath() |
QString | applicationFilePath() |
QString | applicationName() |
qint64 | applicationPid() |
QString | applicationVersion() |
QStringList | arguments() |
bool | closingDown() |
QAbstractEventDispatcher * | eventDispatcher() |
int | exec() |
bool | installTranslator(QTranslator *translationFile) |
QCoreApplication * | instance() |
bool | isQuitLockEnabled() |
bool | isSetuidAllowed() |
QStringList | libraryPaths() |
QString | organizationDomain() |
QString | organizationName() |
void | postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority) |
void | processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) |
(since 6.7) void | processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline) |
void | processEvents(QEventLoop::ProcessEventsFlags flags, int ms) |
void | removeLibraryPath(const QString &path) |
void | removePostedEvents(QObject *receiver, int eventType = 0) |
bool | removeTranslator(QTranslator *translationFile) |
bool | sendEvent(QObject *receiver, QEvent *event) |
void | sendPostedEvents(QObject *receiver = nullptr, int event_type = 0) |
void | setApplicationName(const QString &application) |
void | setApplicationVersion(const QString &version) |
void | setAttribute(Qt::ApplicationAttribute attribute, bool on = true) |
void | setEventDispatcher(QAbstractEventDispatcher *eventDispatcher) |
void | setLibraryPaths(const QStringList &paths) |
void | setOrganizationDomain(const QString &orgDomain) |
void | setOrganizationName(const QString &orgName) |
void | setQuitLockEnabled(bool enabled) |
void | setSetuidAllowed(bool allow) |
bool | startingUp() |
bool | testAttribute(Qt::ApplicationAttribute attribute) |
QString | translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) |
Reimplementierte geschützte Funktionen
virtual bool | event(QEvent *e) override |
Verwandte Nicht-Mitglieder
void | qAddPostRoutine(QtCleanUpFunction ptr) |
void | qRemovePostRoutine(QtCleanUpFunction ptr) |
Makros
Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr) | |
Q_DECLARE_TR_FUNCTIONS(context) |
Detaillierte Beschreibung
Diese Klasse wird von Nicht-GUI-Anwendungen verwendet, um ihre Ereignisschleife bereitzustellen. Für Nicht-GUI-Anwendungen, die Qt verwenden, sollte es genau ein QCoreApplication-Objekt geben. Für GUI-Anwendungen, siehe QGuiApplication. Für Anwendungen, die das Qt Widgets Modul verwenden, siehe QApplication.
QCoreApplication enthält die Hauptereignisschleife, in der alle Ereignisse vom Betriebssystem (z.B. Timer- und Netzwerkereignisse) und anderen Quellen verarbeitet und weitergeleitet werden. Außerdem werden hier die Initialisierung und Beendigung der Anwendung sowie systemweite und anwendungsweite Einstellungen vorgenommen.
Die Ereignisschleife und Ereignisbehandlung
Die Ereignisschleife wird mit einem Aufruf von exec() gestartet. Lang andauernde Operationen können processEvents() aufrufen, um die Anwendung reaktionsfähig zu halten.
Im Allgemeinen empfehlen wir, so früh wie möglich ein QCoreApplication, QGuiApplication oder ein QApplication Objekt in Ihrer main()
Funktion zu erstellen. exec() kehrt erst zurück, wenn die Ereignisschleife beendet ist, z. B. wenn quit() aufgerufen wird.
Mehrere statische Komfortfunktionen werden ebenfalls bereitgestellt. Das QCoreApplication-Objekt ist über instance() verfügbar. Ereignisse können mit sendEvent() gesendet oder mit postEvent() in eine Ereigniswarteschlange gestellt werden. Ausstehende Ereignisse können mit removePostedEvents() entfernt oder mit sendPostedEvents() versendet werden.
Die Klasse bietet einen quit()-Slot und ein aboutToQuit()-Signal.
Anwendungs- und Bibliothekspfade
Eine Anwendung hat einen applicationDirPath() und einen applicationFilePath(). Bibliothekspfade (siehe QLibrary) können mit libraryPaths() abgerufen und mit setLibraryPaths(), addLibraryPath() und removeLibraryPath() manipuliert werden.
Internationalisierung und Übersetzungen
Übersetzungsdateien können mit installTranslator() und removeTranslator() hinzugefügt oder entfernt werden. Anwendungsstrings können mit translate() übersetzt werden. Die Funktion QObject::tr() ist in Form von translate() implementiert.
Zugriff auf Befehlszeilenargumente
Auf die Kommandozeilenargumente, die an den Konstruktor von QCoreApplication übergeben werden, sollte mit der Funktion arguments() zugegriffen werden.
Hinweis: QCoreApplication entfernt die Option -qmljsdebugger="..."
. Sie parst das Argument von qmljsdebugger
und entfernt dann diese Option und ihr Argument.
Für eine erweiterte Handhabung von Kommandozeilenoptionen erstellen Sie eine QCommandLineParser.
Locale-Einstellungen
Unter Unix/Linux ist Qt so konfiguriert, dass es standardmäßig die Einstellungen der System-Sprachumgebung verwendet. Dies kann zu Konflikten bei der Verwendung von POSIX-Funktionen führen, z.B. bei der Konvertierung zwischen Datentypen wie Fließkommazahlen und Zeichenketten, da die Notation je nach Gebietsschema unterschiedlich sein kann. Um dieses Problem zu umgehen, rufen Sie die POSIX-Funktion setlocale(LC_NUMERIC,"C")
direkt nach der Initialisierung von QApplication, QGuiApplication oder QCoreApplication auf, um die Locale, die für die Zahlenformatierung verwendet wird, auf die "C"-Locale zurückzusetzen.
Siehe auch QGuiApplication, QAbstractEventDispatcher, QEventLoop, Producer und Consumer mit Semaphoren und Producer und Consumer mit Wartebedingungen.
Dokumentation der Eigenschaften
applicationName : QString
Diese Eigenschaft enthält den Namen dieser Anwendung
Der Anwendungsname wird in verschiedenen Qt-Klassen und -Modulen verwendet, vor allem in QSettings, wenn er mit dem Standardkonstruktor erstellt wird. Andere Verwendungen sind in formatierten Logging-Ausgaben (siehe qSetMessagePattern()), in der Ausgabe von QCommandLineParser, in QTemporaryDir und QTemporaryFile Standardpfaden, und in einigen Dateispeicherorten von QStandardPaths. Qt D-BusAuch die Barrierefreiheit und die XCB-Plattformintegration verwenden den Anwendungsnamen.
Wenn er nicht gesetzt ist, ist der Anwendungsname standardmäßig der Name der ausführbaren Datei.
Zugriffsfunktionen:
QString | applicationName() |
void | setApplicationName(const QString &application) |
Benachrichtigungssignal:
void | applicationNameChanged() |
Siehe auch organizationName, organizationDomain, applicationVersion, und applicationFilePath().
applicationVersion : QString
Diese Eigenschaft enthält die Version dieser Anwendung
Wenn sie nicht gesetzt ist, wird die Anwendungsversion auf einen plattformspezifischen Wert zurückgesetzt, der aus der ausführbaren Datei oder dem Paket der Hauptanwendung ermittelt wird (seit Qt 5.9):
Plattform | Quelle |
---|---|
Windows (klassischer Desktop) | PRODUCTVERSION-Parameter der VERSIONINFO-Ressource |
macOS, iOS, tvOS, watchOS | CFBundleVersion-Eigenschaft der Informationseigenschaftsliste |
Android | android:versionName-Eigenschaft des AndroidManifest.xml-Manifest-Elements |
Auf anderen Plattformen ist der Standardwert eine leere Zeichenkette.
Zugriffsfunktionen:
QString | applicationVersion() |
void | setApplicationVersion(const QString &version) |
Benachrichtigungssignal:
void | applicationVersionChanged() |
Siehe auch applicationName, organizationName, und organizationDomain.
organizationDomain : QString
Diese Eigenschaft enthält die Internet-Domäne der Organisation, die diese Anwendung geschrieben hat.
Der Wert wird von der Klasse QSettings verwendet, wenn sie mit dem Standardkonstruktor erstellt wird. Dies erspart die Wiederholung dieser Informationen bei der Erstellung eines QSettings Objekts.
Auf Mac verwendet QSettings organizationDomain() als Organisation, wenn es sich nicht um eine leere Zeichenkette handelt; andernfalls wird organizationName() verwendet. Auf allen anderen Plattformen verwendet QSettings organizationName () als Organisation.
Zugriffsfunktionen:
QString | organizationDomain() |
void | setOrganizationDomain(const QString &orgDomain) |
Benachrichtigungssignal:
void | organizationDomainChanged() |
Siehe auch organizationName, applicationName, und applicationVersion.
organizationName : QString
Diese Eigenschaft enthält den Namen der Organisation, die diese Anwendung geschrieben hat.
Der Wert wird von der Klasse QSettings verwendet, wenn sie mit dem Standardkonstruktor erstellt wird. Dies erspart die Wiederholung dieser Informationen bei der Erstellung eines QSettings Objekts.
Auf dem Mac verwendet QSettings organizationDomain () als Organisation, wenn es sich nicht um eine leere Zeichenkette handelt; andernfalls verwendet es organizationName(). Auf allen anderen Plattformen verwendet QSettings den Organisationsnamen() als Organisation.
Zugriffsfunktionen:
QString | organizationName() |
void | setOrganizationName(const QString &orgName) |
Melder-Signal:
void | organizationNameChanged() |
Siehe auch organizationDomain und applicationName.
quitLockEnabled : bool
Diese Eigenschaft gibt an, ob die Verwendung der Funktion QEventLoopLocker zum Beenden der Anwendung führen kann.
Wenn diese Eigenschaft true
ist, wird die Freigabe der letzten verbleibenden QEventLoopLocker, die auf die Anwendung wirkt, versuchen, die Anwendung zu beenden.
Beachten Sie, dass der Versuch, die Anwendung zu beenden, nicht unbedingt dazu führt, dass die Anwendung beendet wird, z. B. wenn noch Fenster geöffnet sind oder das Ereignis QEvent::Quit ignoriert wird.
Die Voreinstellung ist true
.
Zugriffsfunktionen:
bool | isQuitLockEnabled() |
void | setQuitLockEnabled(bool enabled) |
Siehe auch QEventLoopLocker.
Dokumentation der Mitgliedsfunktionen
QCoreApplication::QCoreApplication(int &argc, char **argv)
Konstruiert eine Qt Core-Anwendung. Kernanwendungen sind Anwendungen ohne grafische Benutzeroberfläche. Solche Anwendungen werden auf der Konsole oder als Serverprozesse verwendet.
Die Argumente argc und argv werden von der Anwendung verarbeitet und in einer bequemeren Form von der Funktion arguments() zur Verfügung gestellt.
Warnung: Die Daten, auf die argc und argv verweisen, müssen während der gesamten Lebensdauer des QCoreApplication-Objekts gültig bleiben. Darüber hinaus muss argc größer als Null sein und argv muss mindestens eine gültige Zeichenkette enthalten.
[virtual noexcept]
QCoreApplication::~QCoreApplication()
Zerstört das Objekt QCoreApplication.
[private signal]
void QCoreApplication::aboutToQuit()
Dieses Signal wird ausgegeben, wenn die Anwendung im Begriff ist, die Hauptereignisschleife zu beenden, z. B. wenn der Pegel der Ereignisschleife auf Null fällt. Dies kann entweder nach einem Aufruf von quit() innerhalb der Anwendung geschehen oder wenn der Benutzer die gesamte Desktop-Sitzung beendet.
Das Signal ist besonders nützlich, wenn Ihre Anwendung in letzter Sekunde aufräumen muss. Beachten Sie, dass in diesem Zustand keine Benutzerinteraktion möglich ist.
Hinweis: Zu diesem Zeitpunkt läuft die Hauptereignisschleife noch, verarbeitet aber bei der Rückkehr keine weiteren Ereignisse außer QEvent::DeferredDelete Ereignissen für Objekte, die über deleteLater() gelöscht wurden. Wenn eine Ereignisverarbeitung erforderlich ist, verwenden Sie eine verschachtelte Ereignisschleife oder rufen Sie QCoreApplication::processEvents() manuell auf.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch quit().
[static]
void QCoreApplication::addLibraryPath(const QString &path)
Stellt path an den Anfang der Bibliothekspfadliste, um sicherzustellen, dass zuerst nach Bibliotheken gesucht wird. Wenn path leer ist oder sich bereits in der Pfadliste befindet, wird die Pfadliste nicht geändert.
Die Standardpfadliste besteht aus einem oder zwei Einträgen. Der erste ist das Installationsverzeichnis für Plugins, also INSTALL/plugins
, wobei INSTALL
das Verzeichnis ist, in dem Qt installiert wurde. Der zweite ist das eigene Verzeichnis der Anwendung(nicht das aktuelle Verzeichnis), aber nur nachdem das QCoreApplication Objekt instanziiert wurde.
Die Bibliothekspfade werden auf den Standard zurückgesetzt, wenn eine Instanz von QCoreApplication zerstört wird.
Siehe auch removeLibraryPath(), libraryPaths(), und setLibraryPaths().
[static]
QString QCoreApplication::applicationDirPath()
Gibt das Verzeichnis zurück, das die ausführbare Datei der Anwendung enthält.
Wenn Sie zum Beispiel Qt im Verzeichnis C:\Qt
installiert haben und das Beispiel regexp
ausführen, gibt diese Funktion "C:/Qt/examples/tools/regexp" zurück.
Unter macOS und iOS verweist dies auf das Verzeichnis, das die ausführbare Datei enthält, die sich in einem Anwendungsbündel befinden kann (wenn die Anwendung gebündelt ist).
Warnung: Unter Linux wird diese Funktion versuchen, den Pfad aus dem /proc
Dateisystem zu erhalten. Wenn dies fehlschlägt, nimmt sie an, dass argv[0]
den absoluten Dateinamen der ausführbaren Datei enthält. Die Funktion geht auch davon aus, dass das aktuelle Verzeichnis nicht von der Anwendung geändert wurde.
Siehe auch applicationFilePath().
[static]
QString QCoreApplication::applicationFilePath()
Gibt den Dateipfad der ausführbaren Datei der Anwendung zurück.
Wenn Sie zum Beispiel Qt im Verzeichnis /usr/local/qt
installiert haben und das Beispiel regexp
ausführen, gibt diese Funktion "/usr/local/qt/examples/tools/regexp/regexp" zurück.
Warnung: Unter Linux versucht diese Funktion, den Pfad aus dem Dateisystem /proc
zu ermitteln. Wenn dies fehlschlägt, nimmt sie an, dass argv[0]
den absoluten Dateinamen der ausführbaren Datei enthält. Die Funktion geht auch davon aus, dass das aktuelle Verzeichnis nicht von der Anwendung geändert wurde.
Siehe auch applicationDirPath().
[static]
qint64 QCoreApplication::applicationPid()
Gibt die aktuelle Prozess-ID für die Anwendung zurück.
[static]
QStringList QCoreApplication::arguments()
Gibt die Liste der Befehlszeilenargumente zurück.
Normalerweise ist arguments().at(0) der Programmname, arguments().at(1) ist das erste Argument und arguments().last() ist das letzte Argument. Siehe den Hinweis unten über Windows.
Der Aufruf dieser Funktion ist langsam - Sie sollten das Ergebnis in einer Variablen speichern, wenn Sie die Befehlszeile parsen.
Warnung: Unter Unix wird diese Liste aus den Parametern argc und argv erstellt, die dem Konstruktor in der Funktion main() übergeben werden. Die String-Daten in argv werden mit QString::fromLocal8Bit() interpretiert; daher ist es nicht möglich, z.B. japanische Befehlszeilenargumente auf einem System zu übergeben, das in einer Latin1-Sprachumgebung läuft. Die meisten modernen Unix-Systeme haben diese Einschränkung nicht, da sie Unicode-basiert sind.
Unter Windows wird die Liste nur dann aus den argc- und argv-Parametern erstellt, wenn modifizierte argv/argc-Parameter an den Konstruktor übergeben werden. In diesem Fall kann es zu Kodierungsproblemen kommen.
Andernfalls werden die Argumente() aus dem Rückgabewert von GetCommandLine() gebildet. Dies hat zur Folge, dass die von arguments().at(0) angegebene Zeichenkette unter Windows möglicherweise nicht der Programmname ist, je nachdem, wie die Anwendung gestartet wurde.
Siehe auch applicationFilePath() und QCommandLineParser.
[since 6.5]
Qt::PermissionStatus QCoreApplication::checkPermission(const QPermission &permission)
Überprüft den Status der angegebenen permission
Wenn das Ergebnis Qt::PermissionStatus::Undetermined ist, sollte die Erlaubnis über requestPermission() angefordert werden, um die Absicht des Benutzers zu bestimmen.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch requestPermission() und Application Permissions.
[static]
bool QCoreApplication::closingDown()
Gibt true
zurück, wenn die Anwendungsobjekte zerstört werden; andernfalls wird false
zurückgegeben.
Siehe auch startingUp().
[override virtual protected]
bool QCoreApplication::event(QEvent *e)
Reimplements: QObject::event(QEvent *e).
[static]
QAbstractEventDispatcher *QCoreApplication::eventDispatcher()
Gibt einen Zeiger auf das Event-Dispatcher-Objekt für den Haupt-Thread zurück. Wenn kein Event-Dispatcher für den Thread existiert, gibt diese Funktion nullptr
zurück.
Siehe auch setEventDispatcher().
[static]
int QCoreApplication::exec()
Tritt in die Hauptereignisschleife ein und wartet, bis exit() aufgerufen wird. Gibt den Wert zurück, der an exit() übergeben wurde (der 0 ist, wenn exit() über quit() aufgerufen wird).
Es ist notwendig, diese Funktion aufzurufen, um die Ereignisbehandlung zu starten. Die Hauptereignisschleife empfängt Ereignisse vom Fenstersystem und gibt diese an die Anwendungswidgets weiter.
Damit Ihre Anwendung eine Leerlaufverarbeitung durchführt (indem eine spezielle Funktion immer dann ausgeführt wird, wenn keine Ereignisse anstehen), verwenden Sie eine QChronoTimer mit 0ns Timeout. Fortschrittlichere Leerlaufverarbeitungsschemata können mit processEvents() erreicht werden.
Wir empfehlen Ihnen, den Aufräumcode mit dem Signal aboutToQuit() zu verbinden, anstatt ihn in die Funktion main()
Ihrer Anwendung zu integrieren, da auf einigen Plattformen der Aufruf exec() möglicherweise nicht zurückkehrt. Wenn sich der Benutzer beispielsweise unter Windows abmeldet, beendet das System den Prozess, nachdem Qt alle Fenster der obersten Ebene geschlossen hat. Daher gibt es keine Garantie, dass die Anwendung nach dem exec()-Aufruf Zeit hat, ihre Ereignisschleife zu verlassen und Code am Ende der Funktion main()
auszuführen.
Siehe auch quit(), exit(), processEvents(), und QApplication::exec().
[static slot]
void QCoreApplication::exit(int returnCode = 0)
Weist die Anwendung an, sich mit einem Rückgabewert zu beenden.
Nach dem Aufruf dieser Funktion verlässt die Anwendung die Hauptereignisschleife und kehrt vom Aufruf der Funktion exec() zurück. Die Funktion exec() gibt returnCode zurück. Wenn die Ereignisschleife nicht läuft, führt diese Funktion nichts aus.
Konventionell bedeutet ein returnCode von 0 Erfolg, und jeder Wert ungleich Null bedeutet einen Fehler.
Es ist eine gute Praxis, Signale immer über QueuedConnection mit diesem Slot zu verbinden. Wenn ein mit diesem Slot verbundenes (nicht in eine Warteschlange gestelltes) Signal ausgegeben wird, bevor die Kontrolle in die Hauptereignisschleife eintritt (z. B. bevor "int main" exec() aufruft), hat der Slot keine Wirkung und die Anwendung wird nie beendet. Die Verwendung einer Warteschlangenverbindung stellt sicher, dass der Slot erst aufgerufen wird, nachdem die Steuerung in die Hauptereignisschleife eingetreten ist.
Beachten Sie, dass diese Funktion im Gegensatz zur gleichnamigen Funktion der C-Bibliothek zum Aufrufer zurückkehrt - die Ereignisverarbeitung wird angehalten.
Beachten Sie auch, dass diese Funktion nicht thread-sicher ist. Sie sollte nur vom Haupt-Thread aus aufgerufen werden (dem Thread, in dem das Objekt QCoreApplication Ereignisse verarbeitet). Um die Anwendung von einem anderen Thread aus zum Beenden aufzufordern, verwenden Sie entweder QCoreApplication::quit() oder rufen Sie diese Funktion stattdessen vom Hauptthread aus mit QMetaMethod::invokeMethod() auf.
void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
Installiert einen Ereignisfilter filterObj für alle nativen Ereignisse, die von der Anwendung im Hauptthread empfangen werden.
Der Ereignisfilter filterObj empfängt Ereignisse über seine Funktion nativeEventFilter(), die für alle nativen Ereignisse aufgerufen wird, die im Haupt-Thread empfangen werden.
Die Funktion QAbstractNativeEventFilter::nativeEventFilter() sollte true zurückgeben, wenn das Ereignis gefiltert, d.h. gestoppt werden soll. Sie sollte false zurückgeben, damit die normale Qt-Verarbeitung fortgesetzt werden kann: Das native Ereignis kann dann in ein QEvent übersetzt und durch die Standard-Qt event Filterung, z.B. QObject::installEventFilter(), behandelt werden.
Wenn mehrere Ereignisfilter installiert sind, wird der zuletzt installierte Filter zuerst aktiviert.
Hinweis: Die hier eingestellte Filterfunktion empfängt native Nachrichten, d.h. MSG oder XCB Event Structs.
Hinweis: Native Ereignisfilter werden in der Anwendung deaktiviert, wenn das Attribut Qt::AA_PluginApplication gesetzt ist.
Für maximale Portabilität sollten Sie immer versuchen, QEvent und QObject::installEventFilter() zu verwenden, wann immer dies möglich ist.
Siehe auch QObject::installEventFilter().
[static]
bool QCoreApplication::installTranslator(QTranslator *translationFile)
Fügt die Übersetzungsdatei translationFile in die Liste der Übersetzungsdateien ein, die für Übersetzungen verwendet werden sollen.
Es können mehrere Übersetzungsdateien installiert werden. Es wird in der umgekehrten Reihenfolge der Installation nach Übersetzungen gesucht, d.h. die zuletzt installierte Übersetzungsdatei wird zuerst durchsucht und die erste installierte Übersetzungsdatei wird zuletzt durchsucht. Die Suche wird abgebrochen, sobald eine Übersetzung gefunden wird, die eine passende Zeichenfolge enthält.
Das Installieren oder Entfernen einer QTranslator, oder das Ändern einer installierten QTranslator erzeugt ein LanguageChange Ereignis für die QCoreApplication Instanz. Eine QApplication Instanz wird das Ereignis an alle Toplevel-Widgets weitergeben, wo eine Neuimplementierung von changeEvent die Benutzeroberfläche neu übersetzen kann, indem sie für den Benutzer sichtbare Zeichenketten über die Funktion tr() an die entsprechenden Eigenschaftssetzer weitergibt. Von Qt Widgets Designer generierte Benutzeroberflächenklassen bieten eine retranslateUi()
Funktion, die aufgerufen werden kann.
Die Funktion gibt im Erfolgsfall true
und im Fehlerfall false zurück.
Hinweis: QCoreApplication übernimmt nicht den Besitz von translationFile.
Siehe auch removeTranslator(), translate(), QTranslator::load(), und Vorbereiten auf dynamische Sprachänderungen.
[static noexcept]
QCoreApplication *QCoreApplication::instance()
Gibt einen Zeiger auf die Instanz QCoreApplication (oder QGuiApplication/QApplication) der Anwendung zurück.
Wenn keine Instanz zugewiesen wurde, wird nullptr
zurückgegeben.
[static]
bool QCoreApplication::isSetuidAllowed()
Gibt true zurück, wenn die Anwendung auf UNIX-Plattformen setuid ausführen darf.
Siehe auch QCoreApplication::setSetuidAllowed().
[static]
QStringList QCoreApplication::libraryPaths()
Gibt eine Liste von Pfaden zurück, die die Anwendung beim dynamischen Laden von Bibliotheken durchsuchen wird.
Der Rückgabewert dieser Funktion kann sich ändern, wenn eine QCoreApplication erstellt wird. Es wird nicht empfohlen, sie vor der Erstellung einer QCoreApplication aufzurufen. Das Verzeichnis der ausführbaren Anwendung(nicht das Arbeitsverzeichnis) ist Teil der Liste, wenn es bekannt ist. Um es bekannt zu machen, muss ein QCoreApplication erstellt werden, da es argv[0]
verwendet, um es zu finden.
Qt stellt Standard-Bibliotheks-Pfade zur Verfügung, aber sie können auch über eine qt.conf-Datei festgelegt werden. Pfade, die in dieser Datei angegeben werden, überschreiben die Standardwerte. Beachten Sie, dass die Datei qt.conf, wenn sie sich im Verzeichnis der ausführbaren Anwendung befindet, möglicherweise nicht gefunden wird, bis eine QCoreApplication erstellt wird. Wenn sie beim Aufruf dieser Funktion nicht gefunden wird, werden die Standard-Bibliotheks-Pfade verwendet.
Die Liste enthält das Installationsverzeichnis für Plugins, falls es existiert (das Standard-Installationsverzeichnis für Plugins ist INSTALL/plugins
, wobei INSTALL
das Verzeichnis ist, in dem Qt installiert wurde). Die durch Doppelpunkte getrennten Einträge der Umgebungsvariablen QT_PLUGIN_PATH
werden immer hinzugefügt. Das Plugin-Installationsverzeichnis (und dessen Existenz) kann sich ändern, wenn das Verzeichnis der ausführbaren Anwendung bekannt wird.
Siehe auch setLibraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary, und How to Create Qt Plugins.
[virtual]
bool QCoreApplication::notify(QObject *receiver, QEvent *event)
Sendet event an receiver: receiver->event(event). Gibt den Wert zurück, der vom Ereignis-Handler des Empfängers zurückgegeben wird. Beachten Sie, dass diese Funktion für alle Ereignisse aufgerufen wird, die an ein beliebiges Objekt in einem beliebigen Thread gesendet werden.
Bei bestimmten Ereignistypen (z. B. Maus- und Tastenereignissen) wird das Ereignis an das übergeordnete Objekt des Empfängers weitergegeben und so weiter bis zum obersten Objekt, wenn der Empfänger nicht an dem Ereignis interessiert ist (d. h. es wird false
zurückgegeben).
Es gibt fünf verschiedene Möglichkeiten, wie Ereignisse verarbeitet werden können; die Neuimplementierung dieser virtuellen Funktion ist nur eine von ihnen. Alle fünf Ansätze sind unten aufgeführt:
- Neuimplementierung von paintEvent(), mousePressEvent() und so weiter. Dies ist der häufigste, einfachste und am wenigsten leistungsfähige Weg.
- Neuimplementierung dieser Funktion. Dies ist sehr leistungsfähig und bietet vollständige Kontrolle; allerdings kann nur eine Unterklasse gleichzeitig aktiv sein.
- Installieren eines Ereignisfilters auf QCoreApplication::instance(). Ein solcher Ereignisfilter ist in der Lage, alle Ereignisse für alle Widgets zu verarbeiten, so dass er genauso leistungsfähig ist wie die Neuimplementierung von notify(); darüber hinaus ist es möglich, mehr als einen anwendungsglobalen Ereignisfilter zu haben. Globale Ereignisfilter sehen sogar Mausereignisse für disabled widgets. Beachten Sie, dass Anwendungs-Ereignisfilter nur für Objekte aufgerufen werden, die sich im Haupt-Thread befinden.
- Neuimplementierung von QObject::event() (wie QWidget ). Wenn Sie dies tun, erhalten Sie das Drücken der Tabulatortaste, und Sie sehen die Ereignisse vor allen widget-spezifischen Ereignisfiltern.
- Installieren eines Ereignisfilters für das Objekt. Ein solcher Ereignisfilter erhält alle Ereignisse, einschließlich der Tabulator- und Umschalt+Tabulator-Tastendruck-Ereignisse, solange sie nicht das Fokus-Widget ändern.
Zukünftige Richtung: Diese Funktion wird in Qt 7 nicht mehr für Objekte aufgerufen, die sich außerhalb des Haupt-Threads befinden. Anwendungen, die diese Funktionalität benötigen, sollten in der Zwischenzeit andere Lösungen für ihre Bedürfnisse bei der Ereignisüberprüfung finden. Die Änderung kann auf den Haupt-Thread ausgeweitet werden, wodurch diese Funktion veraltet wird.
Warnung: Wenn Sie diese Funktion außer Kraft setzen, müssen Sie sicherstellen, dass alle Threads, die Ereignisse verarbeiten, damit aufhören, bevor Ihr Anwendungsobjekt zerstört wird. Dies schließt auch Threads ein, die von anderen Bibliotheken gestartet wurden, die Sie möglicherweise verwenden, gilt aber nicht für Qts eigene Threads.
Siehe auch QObject::event() und installNativeEventFilter().
[static]
void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
Fügt das Ereignis event mit dem Objekt receiver als Empfänger des Ereignisses zu einer Ereigniswarteschlange hinzu und kehrt sofort zurück.
Das Ereignis muss auf dem Heap zugewiesen werden, da die Post-Event-Warteschlange das Eigentum an dem Ereignis übernimmt und es löscht, sobald es gesendet wurde. Es ist nicht sicher, auf das Ereignis zuzugreifen, nachdem es gepostet wurde.
Wenn die Kontrolle zur Hauptereignisschleife zurückkehrt, werden alle Ereignisse, die in der Warteschlange gespeichert sind, mit der Funktion notify() gesendet.
Die Ereignisse werden in absteigender priority Reihenfolge sortiert, d.h. Ereignisse mit einem hohen priority werden vor Ereignissen mit einem niedrigeren priority in die Warteschlange gestellt. Der priority kann ein beliebiger ganzzahliger Wert sein, d. h. zwischen INT_MAX und INT_MIN, einschließlich; siehe Qt::EventPriority für weitere Einzelheiten. Ereignisse mit gleichem priority werden in der angegebenen Reihenfolge verarbeitet.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch sendEvent(), notify(), sendPostedEvents(), und Qt::EventPriority.
[static]
void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
Verarbeitet einige anstehende Ereignisse für den aufrufenden Thread gemäß der angegebenen flags.
Von der Verwendung dieser Funktion wird abgeraten. Ziehen Sie es stattdessen vor, lange Operationen aus dem GUI-Thread in einen Hilfsthread zu verlagern und die Verarbeitung in verschachtelten Ereignisschleifen vollständig zu vermeiden. Wenn eine Ereignisverarbeitung wirklich notwendig ist, sollten Sie stattdessen QEventLoop verwenden.
Falls Sie eine lokale Schleife ausführen, die diese Funktion kontinuierlich aufruft, werden die DeferredDelete Ereignisse ohne Ereignisschleife nicht verarbeitet. Dies kann sich auf das Verhalten von Widgets, z. B. QToolTip, auswirken, die auf DeferredDelete Ereignisse angewiesen sind, um ordnungsgemäß zu funktionieren. Eine Alternative wäre der Aufruf von sendPostedEvents() innerhalb dieser lokalen Schleife.
Der Aufruf dieser Funktion verarbeitet Ereignisse nur für den aufrufenden Thread und kehrt zurück, nachdem alle verfügbaren Ereignisse verarbeitet wurden. Verfügbare Ereignisse sind Ereignisse, die vor dem Funktionsaufruf in der Warteschlange stehen. Das bedeutet, dass Ereignisse, die während der Ausführung der Funktion gebucht werden, bis zu einer späteren Runde der Ereignisverarbeitung in die Warteschlange gestellt werden.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch exec(), QTimer, QChronoTimer, QEventLoop::processEvents(), und sendPostedEvents().
[static, since 6.7]
void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
Dies ist eine überladene Funktion.
Verarbeitet anstehende Ereignisse für den aufrufenden Thread, bis deadline abgelaufen ist oder bis es keine weiteren Ereignisse mehr zu verarbeiten gibt, je nachdem, was zuerst eintritt.
Von der Verwendung dieser Funktion wird abgeraten. Ziehen Sie es stattdessen vor, lange Operationen aus dem GUI-Thread in einen Hilfsthread zu verlagern und die Verarbeitung in verschachtelten Ereignisschleifen vollständig zu vermeiden. Wenn die Verarbeitung von Ereignissen wirklich notwendig ist, sollten Sie stattdessen QEventLoop verwenden.
Der Aufruf dieser Funktion verarbeitet Ereignisse nur für den aufrufenden Thread.
Hinweis: Anders als die Überladung processEvents() verarbeitet diese Funktion auch Ereignisse, die während der Ausführung der Funktion gepostet werden.
Hinweis: Alle Ereignisse, die vor dem Timeout in die Warteschlange gestellt wurden, werden verarbeitet, egal wie lange es dauert.
Hinweis: Diese Funktion ist thread-sicher.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch exec(), QTimer, QChronoTimer, und QEventLoop::processEvents().
[static]
void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
Dies ist eine überladene Funktion.
Verarbeitet anstehende Ereignisse für den aufrufenden Thread für ms Millisekunden oder bis keine weiteren Ereignisse mehr zu verarbeiten sind, je nachdem, was kürzer ist.
Dies ist gleichbedeutend mit einem Aufruf:
QCoreApplication::processEvents(flags, QDeadlineTimer(ms));
[static slot]
void QCoreApplication::quit()
Fordert die Anwendung zum Beenden auf.
Die Aufforderung kann ignoriert werden, wenn die Anwendung das Beenden verhindert, z. B. wenn eines ihrer Fenster nicht geschlossen werden kann. Die Anwendung kann dies beeinflussen, indem sie das Ereignis QEvent::Quit auf der Ebene der Anwendung oder QEvent::Close für die einzelnen Fenster behandelt.
Wenn das Beenden nicht unterbrochen wird, wird die Anwendung mit dem Rückgabewert 0 (Erfolg) beendet.
Um die Anwendung zu beenden, ohne dass die Möglichkeit besteht, unterbrochen zu werden, rufen Sie exit() direkt auf. Beachten Sie, dass diese Methode nicht thread-sicher ist.
Es ist eine gute Praxis, Signale immer über QueuedConnection mit diesem Slot zu verbinden. Wenn ein mit diesem Slot verbundenes (nicht in eine Warteschlange gestelltes) Signal ausgegeben wird, bevor die Kontrolle in die Hauptereignisschleife eintritt (z. B. bevor "int main" exec() aufruft), hat der Slot keine Wirkung und die Anwendung wird nie beendet. Die Verwendung einer Warteschlangenverbindung stellt sicher, dass der Slot erst aufgerufen wird, nachdem die Steuerung in die Hauptereignisschleife eingetreten ist.
Beispiel:
QPushButton *quitButton = new QPushButton("Quit"); connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
Hinweis zur Thread-Sicherheit: Diese Funktion kann von jedem Thread aus aufgerufen werden, um die aktuell laufende Hauptanwendungsschleife thread-sicher zu beenden. Die Thread-Sicherheit ist jedoch nicht gewährleistet, wenn das Objekt QCoreApplication zur gleichen Zeit zerstört wird.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch exit() und aboutToQuit().
[static]
void QCoreApplication::removeLibraryPath(const QString &path)
Entfernt path aus der Pfadliste der Bibliothek. Wenn path leer ist oder sich nicht in der Pfadliste befindet, wird die Liste nicht geändert.
Die Bibliothekspfade werden auf die Standardwerte zurückgesetzt, wenn eine Instanz von QCoreApplication zerstört wird.
Siehe auch addLibraryPath(), libraryPaths(), und setLibraryPaths().
void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
Entfernt ein Ereignis filterObject von diesem Objekt. Die Anforderung wird ignoriert, wenn ein solcher Ereignisfilter nicht installiert wurde.
Alle Ereignisfilter für dieses Objekt werden automatisch entfernt, wenn das Objekt zerstört wird.
Es ist immer sicher, einen Ereignisfilter zu entfernen, auch während der Aktivierung des Ereignisfilters (d. h. mit der Funktion nativeEventFilter()).
Siehe auch installNativeEventFilter().
[static]
void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)
Entfernt alle Ereignisse des angegebenen eventType, die mit postEvent() für receiver gebucht wurden.
Die Ereignisse werden nicht versendet, sondern aus der Warteschlange entfernt. Sie sollten diese Funktion nie aufrufen müssen. Falls Sie sie doch aufrufen, beachten Sie, dass das Töten von Ereignissen dazu führen kann, dass receiver eine oder mehrere Invarianten bricht.
Wenn receiver gleich nullptr
ist, werden die Ereignisse von eventType für alle Objekte entfernt. Wenn eventType gleich 0 ist, werden alle Ereignisse für receiver entfernt. Sie sollten diese Funktion niemals aufrufen, wenn eventType gleich 0 ist.
Hinweis: Diese Funktion ist thread-sicher.
[static]
bool QCoreApplication::removeTranslator(QTranslator *translationFile)
Entfernt die Übersetzungsdatei translationFile aus der Liste der von dieser Anwendung verwendeten Übersetzungsdateien. (Sie löscht die Übersetzungsdatei nicht aus dem Dateisystem.)
Die Funktion gibt bei Erfolg true
und bei einem Fehler false zurück.
Siehe auch installTranslator(), translate(), und QObject::tr().
[since 6.5]
template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, Functor &&functor)
Fordert die angegebene permission an.
Wenn die Anfrage fertig ist, wird functor als functor(const QPermission &permission)
aufgerufen, wobei permission
das Ergebnis der Anfrage beschreibt.
Die functor kann eine eigenständige oder statische Mitgliedsfunktion sein:
qApp->requestPermission(QCameraPermission{}, &permissionUpdated);
oder ein Lambda:
qApp->requestPermission(QCameraPermission{}, [](const QPermission &permission) { });
Wenn der Benutzer der Anwendung die angeforderte permission ausdrücklich gewährt oder permission bekannt ist, dass die Benutzerautorisierung auf der gegebenen Plattform nicht erforderlich ist, wird der Status Qt::PermissionStatus::Granted sein.
Wenn der Benutzer der Anwendung die angeforderte permission ausdrücklich verweigert oder die permission bekanntermaßen für Anwendungen auf der gegebenen Plattform nicht zugänglich oder anwendbar ist, lautet der Status Qt::PermissionStatus::Denied.
Das Ergebnis einer Anfrage wird niemals Qt::PermissionStatus::Undetermined sein.
Hinweis: Berechtigungen können nur vom Hauptthread aus angefordert werden.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch checkPermission() und Application Permissions.
[since 6.5]
template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, const QObject *context, Functor functor)
Fordert die angegebene permission an, im Kontext von context.
Wenn die Anfrage fertig ist, wird functor als functor(const QPermission &permission)
aufgerufen, wobei permission
das Ergebnis der Anfrage beschreibt.
Die functor kann eine eigenständige oder statische Mitgliedsfunktion sein:
qApp->requestPermission(QCameraPermission{}, context, &permissionUpdated);
Ein Lambda:
qApp->requestPermission(QCameraPermission{}, context, [](const QPermission &permission) { });
oder ein Slot im context Objekt:
qApp->requestPermission(QCameraPermission{}, this, &CamerWidget::permissionUpdated);
Die functor wird im Thread des context Objekts aufgerufen. Wenn context zerstört wird, bevor die Anfrage abgeschlossen ist, wird functor nicht aufgerufen.
Gewährt der Benutzer der Anwendung ausdrücklich die angeforderte permission, oder ist bekannt, dass permission auf der gegebenen Plattform keine Benutzerautorisierung erfordert, lautet der Status Qt::PermissionStatus::Granted.
Wenn der Benutzer der Anwendung die angeforderte permission ausdrücklich verweigert oder die permission bekanntermaßen für Anwendungen auf der gegebenen Plattform nicht zugänglich oder anwendbar ist, lautet der Status Qt::PermissionStatus::Denied.
Das Ergebnis einer Anfrage wird niemals Qt::PermissionStatus::Undetermined sein.
Hinweis: Berechtigungen können nur vom Hauptthread aus angefordert werden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch checkPermission() und Application Permissions.
[static]
bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
Sendet das Ereignis event direkt an den Verbraucher receiver, unter Verwendung der Funktion notify(). Gibt den Wert zurück, der vom Ereignishandler zurückgegeben wurde.
Das Ereignis wird nicht gelöscht, wenn das Ereignis gesendet wurde. Normalerweise wird das Ereignis z. B. auf dem Stack erzeugt:
QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0); QApplication::sendEvent(mainWindow, &event);
Siehe auch postEvent() und notify().
[static]
void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
Versendet sofort alle Ereignisse, die zuvor mit QCoreApplication::postEvent() in die Warteschlange gestellt wurden und die sich auf das Objekt receiver beziehen und den Ereignistyp event_type haben.
Ereignisse aus dem Fenstersystem werden nicht von dieser Funktion, sondern von processEvents() verschickt.
Wenn receiver gleich nullptr
ist, werden die Ereignisse von event_type für alle Objekte gesendet. Wenn event_type gleich 0 ist, werden alle Ereignisse für receiver gesendet.
Hinweis: Diese Methode muss von dem Thread aus aufgerufen werden, in dem sich ihr Parameter QObject, receiver, befindet.
Siehe auch postEvent().
[static]
void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
Setzt das Attribut attribute, wenn on wahr ist; andernfalls wird das Attribut gelöscht.
Hinweis: Einige Anwendungsattribute müssen vor der Erstellung einer QCoreApplication -Instanz gesetzt werden. Siehe die Qt::ApplicationAttribute Dokumentation für weitere Informationen.
Siehe auch testAttribute().
[static]
void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
Setzt den Event-Dispatcher für den Hauptthread auf eventDispatcher. Dies ist nur möglich, solange noch kein Event-Dispatcher installiert ist. Das heißt, bevor QCoreApplication instanziiert worden ist. Diese Methode übernimmt das Eigentum an dem Objekt.
Siehe auch eventDispatcher().
[static]
void QCoreApplication::setLibraryPaths(const QStringList &paths)
Legt die Liste der zu durchsuchenden Verzeichnisse beim Laden von Plugins mit QLibrary auf paths fest. Alle vorhandenen Pfade werden gelöscht und die Pfadliste besteht aus den in paths angegebenen Pfaden und dem Pfad zur Anwendung.
Die Bibliothekspfade werden auf die Standardwerte zurückgesetzt, wenn eine Instanz von QCoreApplication zerstört wird.
Siehe auch libraryPaths(), addLibraryPath(), removeLibraryPath(), und QLibrary.
[static]
void QCoreApplication::setSetuidAllowed(bool allow)
Erlaubt der Anwendung, setuid auf UNIX-Plattformen auszuführen, wenn allow true ist.
Wenn allow falsch ist (Standardeinstellung) und Qt feststellt, dass die Anwendung mit einer effektiven Benutzerkennung läuft, die sich von der tatsächlichen Benutzerkennung unterscheidet, wird die Anwendung abgebrochen, wenn eine QCoreApplication Instanz erstellt wird.
Qt ist aufgrund seiner großen Angriffsfläche keine geeignete Lösung für Setuid-Programme. Einige Anwendungen müssen jedoch aus historischen Gründen auf diese Weise ausgeführt werden. Dieses Flag verhindert, dass Qt die Anwendung abbricht, wenn dies erkannt wird, und muss gesetzt werden, bevor eine QCoreApplication Instanz erstellt wird.
Hinweis: Es wird dringend empfohlen, diese Option nicht zu aktivieren, da sie Sicherheitsrisiken birgt. Wenn diese Anwendung das Flag aktiviert und Kindprozesse startet, sollte sie die Privilegien so früh wie möglich aufgeben, indem sie setuid(2)
für sich selbst aufruft, oder spätestens mit dem QProcess::UnixProcessParameters::ResetIds Flag.
Siehe auch isSetuidAllowed().
[static]
bool QCoreApplication::startingUp()
Gibt true
zurück, wenn noch kein Anwendungsobjekt erstellt wurde; andernfalls wird false
zurückgegeben.
Siehe auch closingDown().
[static]
bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)
Gibt true
zurück, wenn das Attribut attribute gesetzt ist; andernfalls wird false
zurückgegeben.
Siehe auch setAttribute().
[static]
QString QCoreApplication::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)
Gibt den Übersetzungstext für sourceText zurück, indem die installierten Übersetzungsdateien abgefragt werden. Die Übersetzungsdateien werden von der zuletzt installierten Datei zurück bis zur ersten installierten Datei durchsucht.
QObject::tr() bietet diese Funktionalität auf bequemere Weise.
context ist typischerweise ein Klassenname (z.B. "MyDialog") und sourceText ist entweder englischer Text oder ein kurzer identifizierender Text.
disambiguation ist eine identifizierende Zeichenkette, für den Fall, dass dieselbe sourceText in verschiedenen Rollen innerhalb desselben Kontexts verwendet wird. Standardmäßig ist dies nullptr
.
Weitere Informationen über Kontexte, Disambiguierungen und Kommentare finden Sie in der Dokumentation QTranslator und QObject::tr().
n wird in Verbindung mit %n
verwendet, um Pluralformen zu unterstützen. Siehe QObject::tr() für Details.
Wenn keine der Übersetzungsdateien eine Übersetzung für sourceText in context enthält, gibt diese Funktion eine QString Entsprechung von sourceText zurück.
Diese Funktion ist nicht virtuell. Sie können alternative Übersetzungstechniken verwenden, indem Sie QTranslator subclassing.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch QObject::tr(), installTranslator(), removeTranslator(), und Internationalization and Translations.
Verwandte Nicht-Mitglieder
void qAddPostRoutine(QtCleanUpFunction ptr)
Fügt eine globale Routine hinzu, die vom Destruktor QCoreApplication aufgerufen wird. Diese Funktion wird normalerweise verwendet, um Aufräumroutinen für programmweite Funktionen hinzuzufügen.
Die Bereinigungsroutinen werden in der umgekehrten Reihenfolge ihrer Hinzufügung aufgerufen.
Die durch ptr angegebene Funktion sollte keine Argumente annehmen und nichts zurückgeben. Ein Beispiel:
static int *global_ptr = nullptr; static void cleanup_ptr() { delete [] global_ptr; global_ptr = nullptr; } void init_ptr() { global_ptr = new int[100]; // allocate data qAddPostRoutine(cleanup_ptr); // delete later }
Beachten Sie, dass qAddPostRoutine() für eine anwendungs- oder modulweite Bereinigung oft nicht geeignet ist. Wenn zum Beispiel das Programm in dynamisch geladene Module aufgeteilt ist, kann das relevante Modul entladen werden, lange bevor der QCoreApplication Destruktor aufgerufen wird. In solchen Fällen, wenn die Verwendung von qAddPostRoutine() immer noch wünschenswert ist, kann qRemovePostRoutine() verwendet werden, um zu verhindern, dass eine Routine vom QCoreApplication Destruktor aufgerufen wird. Zum Beispiel, wenn diese Routine aufgerufen wurde, bevor das Modul entladen wurde.
Für Module und Bibliotheken kann es besser sein, einen Initialisierungsmanager mit Referenzzählung oder den Eltern-Kind-Löschmechanismus von Qt zu verwenden. Hier ist ein Beispiel für eine private Klasse, die den Parent-Child-Mechanismus verwendet, um eine Aufräumfunktion zum richtigen Zeitpunkt aufzurufen:
class MyPrivateInitStuff : public QObject { public: static MyPrivateInitStuff *initStuff(QObject *parent) { if (!p) p = new MyPrivateInitStuff(parent); return p; } ~MyPrivateInitStuff() { // cleanup goes here } private: MyPrivateInitStuff(QObject *parent) : QObject(parent) { // initialization goes here } MyPrivateInitStuff *p; };
Durch die Auswahl des richtigen Parent-Objekts kann diese oft dazu gebracht werden, die Daten des Moduls zum richtigen Zeitpunkt zu löschen.
Hinweis: Diese Funktion ist seit Qt 5.10 thread-sicher.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch qRemovePostRoutine().
void qRemovePostRoutine(QtCleanUpFunction ptr)
Entfernt die durch ptr angegebene Aufräumroutine aus der Liste der Routinen, die durch den Destruktor QCoreApplication aufgerufen werden. Die Routine muss zuvor durch einen Aufruf von qAddPostRoutine() zur Liste hinzugefügt worden sein, andernfalls hat diese Funktion keine Wirkung.
Hinweis: Diese Funktion ist seit Qt 5.10 thread-sicher.
Hinweis: Diese Funktion ist thread-safe.
Siehe auch qAddPostRoutine().
Makro-Dokumentation
Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)
Fügt eine globale Funktion hinzu, die vom QCoreApplication Konstruktor aufgerufen wird. Dieses Makro wird normalerweise verwendet, um Bibliotheken für programmweite Funktionen zu initialisieren, ohne dass die Anwendung die Bibliothek zur Initialisierung aufrufen muss.
Die durch ptr angegebene Funktion sollte keine Argumente annehmen und nichts zurückgeben. Ein Beispiel:
// Called once QCoreApplication exists static void preRoutineMyDebugTool() { MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance()); QCoreApplication::instance()->installEventFilter(tool); } Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)
Beachten Sie, dass die Startfunktion am Ende des QCoreApplication -Konstruktors ausgeführt wird, also vor jeder GUI-Initialisierung. Wenn GUI-Code in der Funktion erforderlich ist, verwenden Sie einen Timer (oder einen Aufruf in einer Warteschlange), um die Initialisierung später in der Ereignisschleife durchzuführen.
Wenn QCoreApplication gelöscht und ein anderes QCoreApplication erstellt wird, wird die Startfunktion erneut aufgerufen.
Hinweis: Dieses Makro ist nicht für die Verwendung in Bibliothekscode geeignet, der dann statisch in eine Anwendung gelinkt wird, da die Funktion möglicherweise gar nicht aufgerufen wird, da sie vom Linker eliminiert wird.
Hinweis: Dieses Makro ist reentrant.
Q_DECLARE_TR_FUNCTIONS(context)
Das Makro Q_DECLARE_TR_FUNCTIONS() deklariert und implementiert die Übersetzungsfunktion tr()
mit dieser Signatur:
static inline QString tr(const char *sourceText, const char *comment = nullptr);
Dieses Makro ist nützlich, wenn Sie QObject::tr() in Klassen verwenden wollen, die nicht von QObject erben.
Q_DECLARE_TR_FUNCTIONS() muss ganz am Anfang der Klassendefinition stehen (vor dem ersten public:
oder protected:
). Ein Beispiel:
class MyMfcView : public CView { Q_DECLARE_TR_FUNCTIONS(MyMfcView) public: MyMfcView(); ... };
Der Parameter context ist normalerweise der Klassenname, aber er kann ein beliebiger Text sein.
Siehe auch Q_OBJECT und QObject::tr().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.