Класс 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) | |
| virtual | ~QCoreApplication() |
| void | установитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObj) |
| virtual bool | уведомить(QObject *receiver, QEvent *event) |
| void | удалитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObject) |
Открытые слоты
| void | завершить() |
Сигналы
| void | передЗакрытием() |
| void | изменениеИмениПриложения() |
| void | изменениеВерсииПриложения() |
| void | изменениеДоменаОрганизации() |
| void | изменениеНазванияОрганизации() |
Статические открытые члены
| void | addLibraryPath(const QString &path) |
| QString | applicationDirPath() |
| QString | applicationFilePath() |
| QString | applicationName() |
| qint64 | applicationPid() |
| QString | applicationVersion() |
| QStringList | arguments() |
| bool | closingDown() |
| QAbstractEventDispatcher * | eventDispatcher() |
| int | exec() |
| void | exit(int returnCode = 0) |
| 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, например, при преобразовании между типами данных, такими как float и строки, поскольку обозначение может отличаться в разных локалях. Чтобы обойти эту проблему, вызовите функцию POSIX setlocale(LC_NUMERIC,"C") сразу после инициализации QApplication, QGuiApplication или QCoreApplication, чтобы сбросить локаль, используемую для форматирования чисел, на "C"-локаль.
См. также QGuiApplication, QAbstractEventDispatcher, QEventLoop, Пример семафоров и Пример условных ожиданий.
Документация свойств
applicationName : QString
Это свойство содержит имя приложения.
Значение используется классом QSettings при создании с использованием пустого конструктора. Это позволяет избежать необходимости повторять эту информацию каждый раз при создании объекта QSettings.
Если не задано, имя приложения по умолчанию равно имени исполняемого файла (с версии 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.
На Mac QSettings использует organizationDomain() как организацию, если это не пустая строка; в противном случае используется organizationName(). На всех остальных платформах QSettings использует organizationName() как организацию.
Функции доступа:
| QString | organizationDomain() |
| void | setOrganizationDomain(const QString &orgDomain) |
Сигнал уведомления:
| void | organizationDomainChanged() |
См. также organizationName, applicationName и applicationVersion.
organizationName : QString
Это свойство содержит имя организации, разработавшей это приложение.
Значение используется классом QSettings при создании с использованием пустого конструктора. Это позволяет избежать необходимости повторять эту информацию каждый раз при создании объекта QSettings.
На Mac 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::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); См. также 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().
[static] void QCoreApplication::exit(int returnCode = 0)
Указывает приложению выйти с кодом возврата.
После вызова этой функции приложение покидает основной цикл событий и возвращается из вызова exec(). Функция exec() возвращает returnCode. Если цикл событий не работает, эта функция ничего не делает.
По соглашению, returnCode 0 означает успех, а любое ненулевое значение указывает на ошибку.
Хорошей практикой является всегда подключение сигналов к этому слоту с помощью QueuedConnection. Если сигнал, подключенный (не-очередной) к этому слоту, испускается до того, как управление перейдет в основной цикл событий (например, до того, как "int main" вызовет exec()), слот не имеет эффекта, и приложение никогда не завершается. Использование очереди гарантирует, что слот будет вызван только после того, как управление перейдет в основной цикл событий.
Обратите внимание, что в отличие от одноименной функции C-библиотеки, эта функция возвращается вызывающей стороне — это обработка событий останавливается.
[since 5.0] void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
Устанавливает фильтр событий filterObj для всех событий, получаемых приложением в главном потоке.
Фильтр событий filterObj получает события через свою функцию nativeEventFilter(), которая вызывается для всех событий, получаемых в главном потоке.
Функция QAbstractNativeEventFilter::nativeEventFilter() должна возвращать true, если событие должно быть отфильтровано, т. е. остановлено. Она должна возвращать false, чтобы разрешить продолжение нормальной обработки Qt: событие из ядра может быть затем преобразовано в QEvent и обработано стандартным Qt-фильтром событий, например, QObject::installEventFilter().
Если установлено несколько фильтров событий, фильтр, установленный последним, активируется первым.
Примечание: Функция фильтра здесь получает сообщения ядра, т. е. структуры событий 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 будет принимать владение событием и удалять его после того, как оно будет размещено. После размещения события обращаться к нему небезопасно.
Когда управление возвращается к главному циклу обработки событий, все события, хранящиеся в очереди, будут отправлены с помощью функции 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.
Вы можете вызывать эту функцию время от времени, когда ваша программа выполняет длительную операцию (например, копирование файла).
В случае, если вы запускаете локальный цикл, который постоянно вызывает эту функцию без цикла обработки событий, события DeferredDelete не будут обработаны. Это может повлиять на поведение виджетов, например, QToolTip, которые полагаются на события DeferredDelete для правильной работы. Альтернативой было бы вызов sendPostedEvents() внутри этого локального цикла.
Вызов этой функции обрабатывает события только для вызывающего потока и возвращается после обработки всех доступных событий. Доступные события — это события, помещённые в очередь до вызова функции. Это означает, что события, размещённые во время выполнения функции, будут помещены в очередь до следующего цикла обработки событий.
Примечание: Эта функция безопасна для многопоточного доступа.
См. также exec(), QTimer, QEventLoop::processEvents() и sendPostedEvents().
[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
Эта функция перегружает processEvents().
Обрабатывает ожидающие события для вызывающего потока в течение ms миллисекунд или до тех пор, пока больше нет событий для обработки, в зависимости от того, что наступит раньше.
Вы можете вызывать эту функцию время от времени, когда ваша программа выполняет длительную операцию (например, копирование файла).
Вызов этой функции обрабатывает события только для вызывающего потока.
Примечание: В отличие от перегрузки 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)
Устанавливает список каталогов для поиска при загрузке библиотек в 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.0/qcoreapplication.html