Класс QCoreApplication
Класс QCoreApplication предоставляет цикл обработки событий для приложений Qt без графического интерфейса. Подробнее...
| Заголовок: | #include <QCoreApplication> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует от: | QObject |
| Наследует: |
Свойства
|
|
Открытые функции
| QCoreApplication(int &argc, char **argv) | |
| виртуальный | ~QCoreApplication() |
| void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
| виртуальный bool | notify(QObject *receiver, QEvent *event) |
| void | removeNativeEventFilter(QAbstractNativeEventFilter *filterObject) |
Открытые слоты
| void | exit(int returnCode = 0) |
| void | quit() |
Сигналы
| void | aboutToQuit() |
| void | applicationNameChanged() |
| void | applicationVersionChanged() |
| void | organizationDomainChanged() |
| void | organizationNameChanged() |
Статические открытые члены
| 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) |
| 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) |
Реализованные защищённые функции
| virtual bool | event(QEvent *e) override |
Связанные внешние члены
| void | qAddPostRoutine(QtCleanUpFunction ptr) |
| void | qRemovePostRoutine(QtCleanUpFunction ptr) |
Макросы
| Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr) | |
| Q_DECLARE_TR_FUNCTIONS(context) |
Подробное описание
Этот класс используется в приложениях без графического интерфейса для обеспечения их цикла обработки событий. Для приложений без графического интерфейса, использующих Qt, должен быть ровно один объект QCoreApplication. Для приложений с графическим интерфейсом см. QGuiApplication. Для приложений, использующих модуль Qt Widgets, см. QApplication.
QCoreApplication содержит главный цикл обработки событий, где обрабатываются и передаются все события с операционной системы (например, таймеры и сетевые события) и других источников. Он также обрабатывает инициализацию и завершение приложения, а также системные и прикладные настройки.
Цикл обработки событий и обработка событий
Цикл обработки событий запускается с помощью вызова exec(). Для выполнения длительных операций можно вызвать processEvents(), чтобы приложение оставалось отзывчивым.
В общем случае рекомендуется создавать объект QCoreApplication, QGuiApplication или QApplication в вашей функции main() как можно раньше. exec() вернёт значение только после завершения цикла обработки событий; например, когда вызывается quit().
Также предоставляется несколько статических удобных функций. Объект QCoreApplication доступен через instance(). События могут быть отправлены с помощью sendEvent() или помещены в очередь событий с помощью postEvent(). Ожидающие события могут быть удалены с помощью removePostedEvents() или обработаны с помощью sendPostedEvents().
Класс предоставляет слот quit() и сигнал aboutToQuit().
Пути приложения и библиотек
У приложения есть applicationDirPath() и applicationFilePath(). Пути к библиотекам (см. QLibrary) можно получить с помощью libraryPaths() и изменить с помощью setLibraryPaths(), addLibraryPath() и removeLibraryPath().
Локализация и переводы
Файлы перевода можно добавлять или удалять, используя installTranslator() и removeTranslator(). Строки приложения можно переводить с помощью translate(). Функция QObject::tr() реализована на основе translate().
Получение аргументов командной строки
Аргументы командной строки, передаваемые конструктору QCoreApplication, следует получать, используя функцию arguments().
Примечание: QCoreApplication удаляет опцию -qmljsdebugger="...". Он анализирует аргумент опции qmljsdebugger, а затем удаляет эту опцию вместе с её аргументом.
Для более сложной обработки опций командной строки создайте QCommandLineParser.
Параметры локали
В Unix/Linux Qt по умолчанию настроен на использование системных параметров локали. Это может привести к конфликту при использовании функций POSIX, например, при преобразовании между типами данных, такими как числа с плавающей точкой и строки, так как обозначения могут отличаться между локалями. Чтобы обойти эту проблему, вызовите функцию POSIX setlocale(LC_NUMERIC,"C") сразу после инициализации QApplication, QGuiApplication или QCoreApplication, чтобы сбросить локаль, используемую для форматирования чисел, на "C"-локаль.
См. также QGuiApplication, QAbstractEventDispatcher, QEventLoop, Пример семафоров и Пример условий ожидания.
Документация по свойствам
applicationName : QString
Это свойство содержит имя данного приложения.
Значение используется классом QSettings при создании с использованием пустого конструктора. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
Если не задано, имя приложения по умолчанию — имя исполняемого файла (с Qt 5.0).
Функции доступа:
| QString | applicationName() |
| void | setApplicationName(const QString &application) |
Сигнал уведомления:
| void | applicationNameChanged() |
См. также organizationName, organizationDomain, applicationVersion и applicationFilePath.
applicationVersion : QString
Это свойство содержит версию данного приложения.
Если не задано, версия приложения по умолчанию — значение, зависящее от платформы, определённое по исполняемому файлу или пакету основного приложения (с Qt 5.9):
| Платформа | Источник |
|---|---|
| Windows (классический рабочий стол) | Параметр PRODUCTVERSION ресурса VERSIONINFO |
| macOS, iOS, tvOS, watchOS | Свойство CFBundleVersion файла информации |
| Android | Свойство android:versionName элемента манифеста AndroidManifest.xml |
На других платформах значение по умолчанию — пустая строка.
Функции доступа:
| QString | applicationVersion() |
| void | setApplicationVersion(const QString &version) |
Сигнал уведомления:
| void | applicationVersionChanged() |
См. также applicationName, organizationName и organizationDomain.
organizationDomain : QString
Это свойство содержит домен в интернете организации, которая разработала данное приложение.
Значение используется классом QSettings при создании с использованием пустого конструктора. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
В macOS, QSettings использует organizationDomain(), если она не пустая строка; иначе — organizationName(). На всех других платформах QSettings использует organizationName().
Функции доступа:
| QString | organizationDomain() |
| void | setOrganizationDomain(const QString &orgDomain) |
Сигнал уведомления:
| void | organizationDomainChanged() |
См. также organizationName, applicationName и applicationVersion.
organizationName : QString
Это свойство содержит название организации, которая разработала данное приложение.
Значение используется классом QSettings при создании с использованием пустого конструктора. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
В macOS, QSettings использует organizationDomain(), если она не пустая строка; иначе — organizationName(). На всех других платформах QSettings использует organizationName().
Функции доступа:
| QString | organizationName() |
| void | setOrganizationName(const QString &orgName) |
Сигнал уведомления:
| void | organizationNameChanged() |
См. также organizationDomain и applicationName.
quitLockEnabled : bool
Это свойство указывает, может ли использование функции QEventLoopLocker привести к завершению приложения.
Значение по умолчанию — true.
Функции доступа:
| bool | isQuitLockEnabled() |
| void | setQuitLockEnabled(bool enabled) |
См. также QEventLoopLocker.
Документация по членам-функциям
QCoreApplication::QCoreApplication(int &argc, char **argv)
Конструирует ядро приложения Qt. Приложения ядра — это приложения без графического интерфейса пользователя. Такие приложения используются в консоли или в качестве процессов-серверов.
Аргументы argc и argv обрабатываются приложением и предоставляются в более удобном виде функцией arguments().
Предупреждение: данные, на которые ссылаются argc и argv, должны оставаться валидными на протяжении всего жизненного цикла объекта QCoreApplication. Кроме того, argc должно быть больше нуля, а argv — содержать как минимум одну корректную строку.
[private signal] void QCoreApplication::aboutToQuit()
Этот сигнал испускается, когда приложение собирается покинуть главный цикл событий, например, когда уровень цикла событий становится нулевым. Это может произойти после вызова quit() внутри приложения или при выключении всей сессии рабочего стола пользователем.
Сигнал особенно полезен, если ваше приложение должно выполнить некоторую завершающую очистку. Обратите внимание, что в этом состоянии взаимодействие с пользователем невозможно.
Примечание: Это закрытый сигнал. Он может использоваться в соединениях сигналов, но не может испускаться пользователем.
См. также quit().
[static slot] void QCoreApplication::exit(int returnCode = 0)
Указывает приложению завершить работу с кодом возврата.
После вызова этой функции приложение покидает главный цикл событий и возвращается из вызова exec(). Функция exec() возвращает returnCode. Если цикл событий не запущен, эта функция ничего не делает.
По соглашению, returnCode со значением 0 означает успех, а любое ненулевое значение — ошибку.
Хорошей практикой является всегда подключение сигналов к этому слоту с помощью QueuedConnection. Если сигнал, подключенный (не-очередной) к этому слоту, излучается до того, как управление войдёт в основной цикл событий (например, до того, как "int main" вызовет exec()), слот не окажет никакого эффекта, и приложение никогда не выйдет. Использование очереди подключения гарантирует, что слот не будет вызван до тех пор, пока управление не войдёт в основной цикл событий.
Обратите внимание, что в отличие от функции C-библиотеки с тем же именем, эта функция возвращает вызывающей стороне – остановка происходит в обработке событий.
Обратите также внимание, что эта функция не является потокобезопасной. Она должна вызываться только из основного потока (потока, в котором объект QCoreApplication обрабатывает события). Чтобы попросить приложение выйти из другого потока, используйте QCoreApplication::quit() или вызовите эту функцию из основного потока с помощью QMetaMethod::invokeMethod().
[static slot] void QCoreApplication::quit()
Запрашивает выход приложения.
Запрос может быть проигнорирован, если приложение предотвращает выход, например, если одно из его окон не может быть закрыто. Приложение может повлиять на это, обработав событие QEvent::Quit на уровне приложения или события QEvent::Close для отдельных окон.
Если выход не прерван, приложение завершится с кодом возврата 0 (успех).
Чтобы выйти из приложения без возможности прерывания, вызовите exit() напрямую. Обратите внимание, что метод не является потокобезопасным.
Хорошей практикой является всегда подключение сигналов к этому слоту с помощью QueuedConnection. Если сигнал, подключенный (не-очередной) к этому слоту, излучается до того, как управление войдёт в основной цикл событий (например, до того, как "int main" вызовет exec()), слот не окажет никакого эффекта, и приложение никогда не выйдет. Использование очереди подключения гарантирует, что слот не будет вызван до тех пор, пока управление не войдёт в основной цикл событий.
Пример:
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection); Примечание по потоковой безопасности: эту функцию можно вызвать из любого потока, чтобы безопасно для потоков заставить текущий основной цикл приложения завершиться. Однако безопасность потоков не гарантируется, если объект QCoreApplication уничтожается одновременно.
Примечание: Эта функция потокобезопасна.
См. также exit() и aboutToQuit().
[virtual] QCoreApplication::~QCoreApplication()
Уничтожает объект QCoreApplication.
[static] void QCoreApplication::addLibraryPath(const QString &path)
Добавляет path в начало списка пути к библиотекам, гарантируя, что он будет проверяться для библиотек в первую очередь. Если path пустое или уже присутствует в списке путей, список путей не изменяется.
Список стандартных путей состоит из одного элемента – каталога установки плагинов. Каталог установки плагинов по умолчанию равен INSTALL/plugins, где INSTALL – это каталог, где был установлен Qt.
Пути к библиотекам сбрасываются до стандартных значений при уничтожении экземпляра QCoreApplication.
См. также removeLibraryPath(), libraryPaths() и setLibraryPaths().
[static] QString QCoreApplication::applicationDirPath()
Возвращает каталог, содержащий исполняемый файл приложения.
Например, если Qt установлен в каталоге C:\Qt, и вы запускаете пример regexp, эта функция вернёт "C:/Qt/examples/tools/regexp".
В macOS и iOS она укажет на каталог, фактически содержащий исполняемый файл, который может находиться внутри пакета приложения (если приложение упаковано).
Предупреждение: В Linux эта функция попытается получить путь из /proc файловой системы. Если это не удастся, предполагается, что argv[0] содержит абсолютный путь к исполняемому файлу. Функция также предполагает, что текущий каталог не был изменён приложением.
См. также applicationFilePath().
[static] QString QCoreApplication::applicationFilePath()
Возвращает путь к исполняемому файлу приложения.
Например, если Qt установлен в каталоге /usr/local/qt, и вы запускаете пример regexp, эта функция вернёт "/usr/local/qt/examples/tools/regexp/regexp".
Предупреждение: В Linux эта функция попытается получить путь из /proc файловой системы. Если это не удастся, предполагается, что argv[0] содержит абсолютный путь к исполняемому файлу. Функция также предполагает, что текущий каталог не был изменён приложением.
См. также applicationDirPath().
[static] qint64 QCoreApplication::applicationPid()
Возвращает текущий идентификатор процесса приложения.
[static] QStringList QCoreApplication::arguments()
Возвращает список аргументов командной строки.
Обычно arguments().at(0) – это имя программы, arguments().at(1) – первый аргумент, а arguments().last() – последний аргумент. См. примечание ниже по поводу Windows.
Вызов этой функции медленный – храните результат в переменной при парсинге командной строки.
Предупреждение: В Unix этот список создаётся из параметров argc и argv, переданных конструктору в функции main(). Строковые данные в argv интерпретируются с помощью QString::fromLocal8Bit(); поэтому невозможно, например, передавать японские аргументы командной строки на системе, работающей в локале Latin1. Большинство современных Unix-систем не имеют этого ограничения, так как они основаны на Unicode.
В Windows список создаётся из параметров argc и argv только если модифицированные параметры argv/argc передаются конструктору. В этом случае могут возникнуть проблемы с кодировкой.
В противном случае, аргументы() конструируются из возвращаемого значения GetCommandLine(). В результате этого, строка, возвращаемая arguments().at(0), может не являться именем программы в Windows, в зависимости от того, как было запущено приложение.
См. также applicationFilePath() и QCommandLineParser.
[static] bool QCoreApplication::closingDown()
Возвращает true, если объекты приложения уничтожаются; в противном случае возвращает false.
См. также startingUp().
[override virtual protected] bool QCoreApplication::event(QEvent *e)
Переопределяет: QObject::event(QEvent *e).
[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()
Возвращает указатель на объект диспетчера событий для основного потока. Если для потока нет диспетчера событий, эта функция возвращает nullptr.
См. также setEventDispatcher().
[static] int QCoreApplication::exec()
Входит в основной цикл событий и ожидает, пока не будет вызван exit(). Возвращает значение, переданное exit() (которое равно 0, если exit() вызван через quit()).
Необходимо вызвать эту функцию для запуска обработки событий. Основной цикл событий получает события от системы окон и рассылает их виджетам приложения.
Чтобы заставить ваше приложение выполнять обработку в ожидании (выполняя специальную функцию всякий раз, когда нет ожидающих событий), используйте QTimer с таймаутом 0. Более сложные схемы обработки в ожидании могут быть реализованы с помощью processEvents().
Рекомендуется подключать код очистки к сигналу aboutToQuit(), а не помещать его в функцию main() приложения, потому что на некоторых платформах вызов exec() может не вернуться. Например, в Windows при выходе пользователя из системы, система завершает процесс после того, как Qt закрывает все окна верхнего уровня. Следовательно, нет гарантии, что приложение успеет выйти из своего цикла событий и выполнить код в конце функции main() после вызова exec().
См. также quit(), exit(), processEvents() и QApplication::exec().
[since 5.0] void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
Устанавливает фильтр событий filterObj для всех событий, полученных приложением в основном потоке.
Фильтр событий filterObj получает события через свою функцию nativeEventFilter(), которая вызывается для всех событий, полученных в основном потоке.
Функция QAbstractNativeEventFilter::nativeEventFilter() должна возвращать true, если событие должно быть отфильтровано, т. е. остановлено. Она должна возвращать false, чтобы разрешить продолжить обычную обработку Qt: событие ядра может быть затем преобразовано в QEvent и обработано стандартным Qt-фильтром событий, например, QObject::installEventFilter().
END_OF_DOCUMENT_MARKERЕсли установлено несколько фильтров событий, фильтр, установленный последним, активируется первым.
Примечание: Функция фильтра, установленная здесь, получает родные сообщения, т. е. структуры событий MSG или XCB.
Примечание: Родные фильтры событий будут отключены в приложении, когда атрибут Qt::AA_PluginApplication установлен.
Для максимальной переносимости всегда следует использовать QEvent и QObject::installEventFilter() по возможности.
Эта функция была добавлена в Qt 5.0.
См. также QObject::installEventFilter().
[static] bool QCoreApplication::installTranslator(QTranslator *translationFile)
Добавляет файл перевода translationFile в список файлов перевода, которые будут использоваться для переводов.
Можно установить несколько файлов перевода. Переводы ищутся в обратном порядке, в котором они были установлены, поэтому файл перевода, установленный последним, ищется первым, а первый установленный — последним. Поиск останавливается, как только будет найден перевод, содержащий соответствующую строку.
Установка или удаление QTranslator или изменение установленного QTranslator генерирует событие LanguageChange для экземпляра QCoreApplication. Экземпляр QApplication будет распространять событие на все виджеты верхнего уровня, где переопределение changeEvent может повторно перевести пользовательский интерфейс, передавая отображаемые пользователю строки через функцию tr() соответствующим установщикам свойств. Виджеты пользовательского интерфейса, созданные Qt Designer, предоставляют функцию retranslateUi(), которую можно вызвать.
Функция возвращает true при успехе и false при неудаче.
См. также removeTranslator(), translate(), QTranslator::load() и Динамический перевод.
[static] QCoreApplication *QCoreApplication::instance()
Возвращает указатель на экземпляр QCoreApplication (или QGuiApplication/QApplication) приложения.
Если экземпляр не был выделен, возвращается nullptr.
[static, since 5.3] bool QCoreApplication::isSetuidAllowed()
Возвращает true, если приложение разрешено запускать setuid на платформах UNIX.
Эта функция была добавлена в Qt 5.3.
См. также QCoreApplication::setSetuidAllowed().
[static] QStringList QCoreApplication::libraryPaths()
Возвращает список путей, которые приложение будет искать при динамической загрузке библиотек.
Значение, возвращаемое этой функцией, может измениться при создании QCoreApplication. Не рекомендуется вызывать её до создания QCoreApplication. Директория исполняемого файла приложения (не рабочая директория) входит в список, если она известна. Для того, чтобы она стала известной, необходимо создать QCoreApplication, поскольку он будет использовать argv[0] для её поиска.
Qt предоставляет стандартные пути к библиотекам, но их также можно настроить с помощью файла qt.conf. Пути, указанные в этом файле, переопределят стандартные значения. Обратите внимание, что если файл qt.conf находится в каталоге исполняемого файла приложения, он может быть не найден до создания QCoreApplication. Если он не найден при вызове этой функции, будут использоваться стандартные пути к библиотекам.
Список будет включать каталог установки плагинов, если он существует (стандартный каталог установки плагинов — INSTALL/plugins, где INSTALL — каталог, в котором был установлен Qt). Разделенные двоеточием записи переменной окружения QT_PLUGIN_PATH всегда добавляются. Каталог установки плагинов (и его существование) могут измениться, когда станет известна директория исполняемого файла приложения.
Если вы хотите перебрать список, вы можете использовать псевдоключевое слово foreach:
foreach (const QString &path, app.libraryPaths())
do_something(path); См. также setLibraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary и Как создать плагины Qt.
[virtual] bool QCoreApplication::notify(QObject *receiver, QEvent *event)
Отправляет event объекту receiver: receiver->event(event). Возвращает значение, возвращаемое обработчиком события получателя. Обратите внимание, что эта функция вызывается для всех событий, отправленных любому объекту в любом потоке.
Для определенных типов событий (например, событий мыши и клавиш) событие будет распространено на родительский объект получателя и так далее до объекта верхнего уровня, если получатель не заинтересован в событии (т. е. он возвращает false).
Существует пять различных способов обработки событий; переопределение этой виртуальной функции — всего лишь один из них. Все пять подходов перечислены ниже:
- Переопределение paintEvent(), mousePressEvent() и так далее. Это наиболее распространённый, простой и наименее мощный способ.
- Переопределение этой функции. Это очень мощно, предоставляя полный контроль; но только один подкласс может быть активен в одно время.
- Установка фильтра событий на QCoreApplication::instance(). Такой фильтр событий может обрабатывать все события для всех виджетов, поэтому он столь же мощный, как и переопределение notify(); кроме того, можно иметь более одного глобального фильтра событий для приложения. Глобальные фильтры событий видят даже события мыши для выключенных виджетов. Обратите внимание, что фильтры событий приложения вызываются только для объектов, которые существуют в основном потоке.
- Переопределение QObject::event() (как делает QWidget). Если вы это делаете, вы получаете нажатия клавиши Tab, и вы получаете возможность увидеть события до любого виджет-специфического фильтра событий.
- Установка фильтра событий на объект. Такой фильтр событий получает все события, включая нажатия клавиш Tab и Shift+Tab, до тех пор, пока они не изменят фокусируемый виджет.
Направление развития: Эта функция не будет вызываться для объектов, живущих вне основного потока в Qt 6. Приложения, которым нужна эта функциональность, должны найти другие решения для своих потребностей в инспекции событий в это время. Изменение может быть расширено на основной поток, что приведет к устареванию этой функции.
Предупреждение: Если вы переопределяете эту функцию, вы должны убедиться, что все потоки, обрабатывающие события, останавливаются до начала уничтожения вашего объекта приложения. Это включает в себя потоки, запущенные другими библиотеками, которые вы можете использовать, но не относится к собственным потокам Qt.
См. также QObject::event() и installNativeEventFilter().
[static] void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
Добавляет событие event, с объектом receiver в качестве получателя события, в очередь событий и возвращается немедленно.
Событие должно быть выделено в куче, так как очередь событий post event получит владение событием и удалит его, как только оно будет размещено. Небезопасно обращаться к событию после того, как оно было размещено.
Когда управление возвращается в основной цикл обработки событий, все события, хранящиеся в очереди, будут отправлены с помощью функции notify().
События упорядочиваются в порядке убывания priority, т. е. события с высоким priority помещаются в очередь перед событиями с более низким priority. Priority может быть любым целочисленным значением, т. е. между INT_MAX и INT_MIN включительно; см. Qt::EventPriority для получения дополнительной информации. События с одинаковым priority будут обрабатываться в порядке их размещения.
Примечание: Эта функция безопасна в многопоточной среде.
См. также sendEvent(), notify(), sendPostedEvents() и Qt::EventPriority.
[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
Обрабатывает некоторые ожидающие события для вызывающего потока в соответствии с указанными flags.
Использование этой функции не рекомендуется. Вместо этого предпочтительнее перемещать длительные операции из потока GUI в вспомогательный поток и полностью избегать вложенной обработки циклов событий. Если обработка событий действительно необходима, рассмотрите использование QEventLoop вместо этого.
В том случае, если вы запускаете локальный цикл, который непрерывно вызывает эту функцию без цикла обработки событий, события DeferredDelete не будут обработаны. Это может повлиять на поведение виджетов, например, QToolTip, которые полагаются на события DeferredDelete для нормальной работы. Альтернативой будет вызов sendPostedEvents() внутри этого локального цикла.
Вызов этой функции обрабатывает события только для вызывающего потока и возвращается после обработки всех доступных событий. Доступные события — это события, помещенные в очередь до вызова функции. Это означает, что события, которые размещаются во время выполнения функции, будут помещены в очередь до следующей обработки событий.
Примечание: Эта функция безопасна в многопоточной среде.
См. также exec(), QTimer, QEventLoop::processEvents() и sendPostedEvents().
END_OF_DOCUMENT_MARKER
[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
Эта функция перегружает processEvents().
Обрабатывает ожидающие события для вызывающей потока в течение ms миллисекунд или до тех пор, пока не будут обработаны все события, в зависимости от того, что произойдет раньше.
Использование этой функции не рекомендуется. Вместо этого предпочтительнее вынести длительные операции из потока пользовательского интерфейса в вспомогательный поток и полностью избежать вложенной обработки цикла событий. Если обработка событий действительно необходима, рассмотрите использование QEventLoop вместо этого.
Вызов этой функции обрабатывает события только для вызывающего потока.
Примечание: В отличие от перегрузки processEvents(), эта функция также обрабатывает события, которые публикуются во время выполнения функции.
Примечание: Все события, которые были помещены в очередь перед истечением времени ожидания, будут обработаны, независимо от того, сколько это займет времени.
Примечание: Эта функция безопасна в многопоточном доступе.
См. также exec(), QTimer и QEventLoop::processEvents().
[static] void QCoreApplication::removeLibraryPath(const QString &path)
Удаляет path из списка пути к библиотекам. Если path пустая или отсутствует в списке путей, список не изменяется.
Пути к библиотекам сбрасываются до значений по умолчанию при уничтожении экземпляра QCoreApplication.
См. также addLibraryPath(), libraryPaths() и setLibraryPaths().
[since 5.0] void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
Удаляет обработчик событий filterObject из этого объекта. Запрос игнорируется, если такой обработчик событий не был установлен.
Все обработчики событий для этого объекта автоматически удаляются при уничтожении этого объекта.
Удаление обработчика событий всегда безопасно, даже во время активации обработчика событий (т.е. из функции nativeEventFilter()).
Эта функция была добавлена в Qt 5.0.
См. также installNativeEventFilter().
[static] void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)
Удаляет все события заданного типа eventType, которые были опубликованы с помощью postEvent() для receiver.
События не отправляются, а удаляются из очереди. Вам никогда не понадобится вызывать эту функцию. Если вы ее вызываете, знайте, что уничтожение событий может привести к нарушению одного или нескольких инвариантов receiver.
Если receiver равно nullptr, события типа eventType удаляются для всех объектов. Если eventType равно 0, удаляются все события для receiver. Вы никогда не должны вызывать эту функцию с eventType равным 0.
Примечание: Эта функция безопасна в многопоточном доступе.
[static] bool QCoreApplication::removeTranslator(QTranslator *translationFile)
Удаляет файл перевода translationFile из списка файлов переводов, используемых этим приложением. (Он не удаляет файл перевода из файловой системы.)
Функция возвращает true при успехе и false при неудаче.
См. также installTranslator(), translate() и QObject::tr().
[static] bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)
Отправляет событие event непосредственно объекту receiver, используя функцию notify(). Возвращает значение, которое было возвращено обработчиком события.
Событие не удаляется, когда оно было отправлено. Обычный подход заключается в создании события в стеке, например:
QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0); QApplication::sendEvent(mainWindow, &event);
См. также postEvent() и notify().
[static] void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
Немедленно отправляет все события, которые были помещены в очередь с помощью QCoreApplication::postEvent() и относятся к объекту receiver и имеют тип события event_type.
События из системы окон не отправляются этой функцией, а отправляются функцией processEvents().
Если receiver равно nullptr, события типа event_type отправляются для всех объектов. Если event_type равно 0, отправляются все события для receiver.
Примечание: Этот метод должен вызываться из потока, в котором находится его параметр QObject, receiver.
См. также postEvent().
[static] void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
Устанавливает атрибут attribute, если on равно true; в противном случае очищает атрибут.
Примечание: Некоторые атрибуты приложения должны быть установлены до создания экземпляра QCoreApplication. Обратитесь к документации Qt::ApplicationAttribute для получения дополнительной информации.
См. также testAttribute().
[static] void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
Устанавливает обработчик событий для основного потока в eventDispatcher. Это возможно только до тех пор, пока обработчик событий еще не установлен. То есть, до того, как был создан экземпляр QCoreApplication. Этот метод принимает владение объектом.
См. также eventDispatcher().
[static] void QCoreApplication::setLibraryPaths(const QStringList &paths)
Устанавливает список каталогов для поиска плагинов с помощью QLibrary в paths. Все существующие пути будут удалены, и список путей будет содержать пути, указанные в paths, и путь к приложению.
Пути к библиотекам сбрасываются до значений по умолчанию при уничтожении экземпляра QCoreApplication.
См. также libraryPaths(), addLibraryPath(), removeLibraryPath() и QLibrary.
[static, since 5.3] void QCoreApplication::setSetuidAllowed(bool allow)
Разрешает приложению выполнять setuid на платформах UNIX, если allow равно true.
Если allow равно false (по умолчанию) и Qt обнаруживает, что приложение выполняется с эффективным идентификатором пользователя, отличным от реального идентификатора пользователя, приложение будет прервано при создании экземпляра QCoreApplication.
Qt не является подходящим решением для программ setuid из-за большой поверхности атак. Однако некоторые приложения могут потребоваться выполнить эту операцию по историческим причинам. Этот флаг предотвратит прерывание Qt приложения при обнаружении этого и должен быть установлен перед созданием экземпляра QCoreApplication.
Примечание: Сильно рекомендуется не включать этот параметр, так как он представляет собой угрозу безопасности.
Эта функция была добавлена в Qt 5.3.
См. также isSetuidAllowed().
[static] bool QCoreApplication::startingUp()
Возвращает true если объект приложения еще не создан; в противном случае возвращает false.
См. также closingDown().
[static] bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)
Возвращает true если атрибут attribute установлен; в противном случае возвращает false.
См. также setAttribute().
[static] QString QCoreApplication::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)
Возвращает текст перевода для sourceText, обращаясь к установленным файлам перевода. Файлы перевода просматриваются от последнего установленного файла к первому.
QObject::tr() предоставляет эту функциональность более удобно.
context обычно является именем класса (например, «MyDialog»), а sourceText — это либо английский текст, либо короткий идентификатор текста.
disambiguation — это строка идентификации, для случаев, когда один и тот же sourceText используется в разных ролях в одном и том же контексте. По умолчанию это nullptr.
См. документацию по QTranslator и QObject::tr() для получения дополнительной информации о контекстах, устранении неоднозначностей и комментариях.
n используется совместно с %n для поддержки множественного числа. Подробности см. в QObject::tr().
Если ни один из файлов переводов не содержит перевода для sourceText в context, эта функция возвращает QString, эквивалентную sourceText.
Эта функция не является виртуальной. Вы можете использовать альтернативные методы перевода, наследуя от QTranslator.
Примечание: Эта функция безопасна в многопоточной среде.
См. также QObject::tr(), installTranslator(), removeTranslator() и translate().
Связанные нечлены
void qAddPostRoutine(QtCleanUpFunction ptr)
Добавляет глобальную функцию, которая будет вызываться из деструктора QCoreApplication. Эта функция обычно используется для добавления функций очистки для функциональности всего приложения.
Функции очистки вызываются в обратном порядке их добавления.
Функция, указанная параметром ptr, не должна принимать аргументы и не должна возвращать значение. Например:
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
} Обратите внимание, что для очистки всего приложения или модуля qAddPostRoutine() часто не подходит. Например, если программа разделена на динамически загружаемые модули, соответствующий модуль может быть загружен намного раньше, чем вызов деструктора QCoreApplication. В таких случаях, если использование qAddPostRoutine() по-прежнему необходимо, qRemovePostRoutine() можно использовать для предотвращения вызова функции деструктором QCoreApplication. Например, если эта функция была вызвана до разгрузки модуля.
Для модулей и библиотек использование менеджера инициализации с подсчётом ссылок или механизма удаления родитель-ребёнок Qt может быть предпочтительнее. Вот пример частного класса, который использует механизм родитель-ребёнок для вызова функции очистки в нужное время:
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;
}; Выбрав подходящий объект-родитель, это часто позволяет очистить данные модуля в нужное время.
Примечание: Эта функция безопасна в многопоточной среде начиная с Qt 5.10.
Примечание: Эта функция безопасна в многопоточной среде.
См. также qRemovePostRoutine().
[since 5.3] void qRemovePostRoutine(QtCleanUpFunction ptr)
Удаляет функцию очистки, указанную параметром ptr, из списка функций, вызываемых деструктором QCoreApplication. Функция должна была быть добавлена в список вызовами qAddPostRoutine(), в противном случае эта функция не окажет никакого влияния.
Примечание: Эта функция безопасна в многопоточной среде начиная с Qt 5.10.
Примечание: Эта функция безопасна в многопоточной среде.
Эта функция была добавлена в Qt 5.3.
См. также qAddPostRoutine().
Документация макросов
[since 5.1] Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)
Добавляет глобальную функцию, которая будет вызываться из конструктора QCoreApplication. Этот макрос обычно используется для инициализации библиотек для функциональности всего приложения без необходимости вызова в библиотеку для инициализации.
Функция, указанная параметром ptr, не должна принимать аргументы и не должна возвращать значение. Например:
// Called once QCoreApplication exists
static void preRoutineMyDebugTool()
{
MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance());
QCoreApplication::instance()->installEventFilter(tool);
}
Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool) Обратите внимание, что функция запуска будет выполняться в конце конструктора QCoreApplication до любой графической инициализации. Если в функции требуется графический код, используйте таймер (или вызов в очереди) для выполнения инициализации позже из цикла обработки событий.
Если QCoreApplication удаляется и создаётся другой QCoreApplication, функция запуска будет вызвана снова.
Примечание: Этот макрос не подходит для использования в коде библиотек, которые затем статически подключаются к приложению, поскольку функция может вообще не вызываться из-за исключения компилятором.
Примечание: Эта функция рекурсивно безопасна.
Эта функция была добавлена в Qt 5.1.
Q_DECLARE_TR_FUNCTIONS(context)
Макрос Q_DECLARE_TR_FUNCTIONS() объявляет и реализует функцию перевода tr() со следующим сигнатуром:
static inline QString tr(const char *sourceText,
const char *comment = nullptr); Этот макрос полезен, если вы хотите использовать QObject::tr() в классах, которые не наследуют от QObject.
Q_DECLARE_TR_FUNCTIONS() должен находиться в самом начале определения класса (перед первым public: или protected:). Например:
class MyMfcView : public CView
{
Q_DECLARE_TR_FUNCTIONS(MyMfcView)
public:
MyMfcView();
...
}; Параметр context обычно является именем класса, но может быть любым текстом.
См. также Q_OBJECT и QObject::tr().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qcoreapplication.html