Класс QCoreApplication
Класс QCoreApplication предоставляет цикл событий для приложений Qt без графического интерфейса. Подробнее...
| Заголовок: | #include <QCoreApplication> |
| qmake: | QT += core |
| Наследует: | QObject |
Свойства
|
|
- 1 свойство унаследовано от QObject
Открытые функции
| QCoreApplication(int &argc, char **argv) | |
| virtual | ~QCoreApplication() |
| void | установитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObj) |
| virtual bool | уведомить(QObject *receiver, QEvent *event) |
| void | удалитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObject) |
- 32 открытые функции унаследованы от QObject
Открытые слоты
| void | выйти() |
- 1 открытый слот унаследован от QObject
Сигналы
| void | передВыходом() |
- 2 сигнала унаследованы от QObject
Статические открытые члены
| void | добавитьПутьКБиблиотеке(const QString &path) |
| QString | директорияПриложения() |
| QString | путьКФайлуПриложения() |
| QString | имяПриложения() |
| qint64 | идентификаторПроцессаПриложения() |
| QString | версияПриложения() |
| QStringList | аргументы() |
| bool | завершение() |
| QAbstractEventDispatcher * | диспетчерСобытий() |
| int | exec() |
| void | выход(int returnCode = 0) |
| bool | установитьПереводчик(QTranslator *translationFile) |
| QCoreApplication * | экземпляр() |
| bool | блокировкаВыходаВключена() |
| bool | разрешениеSetuid() |
| QStringList | путиКБиблиотекам() |
| QString | доменОрганизации() |
| QString | наименованиеОрганизации() |
| void | отправитьСобытие(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority) |
| void | обработатьСобытия(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) |
| void | обработатьСобытия(QEventLoop::ProcessEventsFlags flags, int maxtime) |
| void | удалитьПутьКБиблиотеке(const QString &path) |
| void | удалитьОтправленныеСобытия(QObject *receiver, int eventType = 0) |
| bool | удалитьПереводчик(QTranslator *translationFile) |
| bool | отправитьСобытие(QObject *receiver, QEvent *event) |
| void | отправитьОтправленныеСобытия(QObject *receiver = nullptr, int event_type = 0) |
| void | установитьИмяПриложения(const QString &application) |
| void | установитьВерсиюПриложения(const QString &version) |
| void | установитьАтрибут(Qt::ApplicationAttribute attribute, bool on = true) |
| void | установитьДиспетчерСобытий(QAbstractEventDispatcher *eventDispatcher) |
| void | установитьПутиКБиблиотекам(const QStringList &paths) |
| void | установитьДоменОрганизации(const QString &orgDomain) |
| void | установитьНаименованиеОрганизации(const QString &orgName) |
| void | установитьБлокировкуВыхода(bool enabled) |
| void | разрешитьSetuid(bool allow) |
| bool | запуск() |
| const QMetaObject | статическаяMetaObject |
| bool | проверитьАтрибут(Qt::ApplicationAttribute attribute) |
| QString | перевести(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) |
- 10 статических публичных членов, унаследованных от QObject
Реализованные защищённые функции
| виртуальный bool | event(QEvent *e) переопределено |
- 9 защищённых функций, унаследованных от QObject
Связанные нечлены
| void | qAddPostRoutine(QtCleanUpFunction ptr) |
| void | qRemovePostRoutine(QtCleanUpFunction ptr) |
Макросы
| Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr) | |
| Q_DECLARE_TR_FUNCTIONS(context) |
Подробное описание
Класс QCoreApplication предоставляет цикл обработки событий для приложений Qt без графического интерфейса.
Этот класс используется приложениями без графического интерфейса для обеспечения своего цикла обработки событий. Для приложений без графического интерфейса, использующих 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() и QObject::trUtf8() реализованы с использованием translate().
Доступ к аргументам командной строки
Аргументы командной строки, передаваемые конструктору QCoreApplication, следует получать с помощью функции arguments().
Примечание: QCoreApplication удаляет опцию -qmljsdebugger="...". Он анализирует аргумент qmljsdebugger, а затем удаляет эту опцию вместе с её аргументом.
Для более сложной обработки опций командной строки создайте QCommandLineParser.
Настройки локали
В Unix/Linux Qt по умолчанию настроен на использование системных настроек локали. Это может привести к конфликту при использовании функций POSIX, например, при преобразовании между типами данных, такими как числа с плавающей точкой и строки, так как обозначение может отличаться в разных локалях. Чтобы обойти эту проблему, вызовите функцию POSIX setlocale(LC_NUMERIC,"C") сразу после инициализации QApplication, QGuiApplication или QCoreApplication, чтобы сбросить локаль, используемую для форматирования чисел, на "C"-локальную.
См. также QGuiApplication, QAbstractEventDispatcher, QEventLoop, Пример семафоров и Пример условных переменных ожидания.
END_OF_DOCUMENT_MARKERДокументация свойств
applicationName : QString
Это свойство содержит имя этого приложения.
Значение используется классом QSettings при его создании с помощью конструктора по умолчанию. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
Если не задано, имя приложения по умолчанию — имя исполняемого файла (с Qt 5.0).
Функции доступа:
| QString | applicationName() |
| void | setApplicationName(const QString &application) |
См. также organizationName, organizationDomain, applicationVersion и applicationFilePath.
applicationVersion : QString
Это свойство содержит версию этого приложения.
Если не задано, версия приложения по умолчанию — платформа-специфическое значение, определяемое из исполняемого файла или пакета основного приложения (с Qt 5.9):
| Платформа | Источник |
|---|---|
| Windows (классический рабочий стол) | Параметр PRODUCTVERSION ресурса VERSIONINFO |
| Универсальная платформа Windows | Атрибут version манифеста пакета приложения |
| macOS, iOS, tvOS, watchOS | Свойство CFBundleVersion списка свойств |
| Android | Свойство android:versionName элемента манифеста AndroidManifest.xml |
На других платформах значение по умолчанию — пустая строка.
Это свойство было добавлено в Qt 4.4.
Функции доступа:
| QString | applicationVersion() |
| void | setApplicationVersion(const QString &version) |
См. также applicationName, organizationName и organizationDomain.
organizationDomain : QString
Это свойство содержит домен в интернете организации, которая написала это приложение.
Значение используется классом QSettings при его создании с помощью конструктора по умолчанию. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
В Mac, QSettings использует organizationDomain() в качестве организации, если это не пустая строка; в противном случае используется organizationName(). На всех остальных платформах QSettings использует organizationName() в качестве организации.
Функции доступа:
| QString | organizationDomain() |
| void | setOrganizationDomain(const QString &orgDomain) |
См. также organizationName, applicationName и applicationVersion.
organizationName : QString
Это свойство содержит имя организации, которая написала это приложение.
Значение используется классом QSettings при его создании с помощью конструктора по умолчанию. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
В Mac, QSettings использует organizationDomain() в качестве организации, если это не пустая строка; в противном случае используется organizationName(). На всех остальных платформах QSettings использует organizationName() в качестве организации.
Функции доступа:
| QString | organizationName() |
| void | setOrganizationName(const QString &orgName) |
См. также 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 — содержать по меньшей мере одну корректную строку символов.
[virtual] QCoreApplication::~QCoreApplication()
Деструктор объекта QCoreApplication.
[signal] void QCoreApplication::aboutToQuit()
Этот сигнал генерируется, когда приложение собирается завершить работу основного цикла событий, например, когда уровень цикла событий снижается до нуля. Это может произойти после вызова quit() внутри приложения или при выключении всей сессии рабочего стола пользователем.
Сигнал особенно полезен, если вашему приложению необходимо выполнить некоторую завершающую очистку. Обратите внимание, что в этом состоянии невозможно взаимодействовать с пользователем.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может генерироваться пользователем.
См. также quit().
[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()
Возвращает текущий идентификатор процесса приложения.
Эта функция была добавлена в Qt 4.4.
[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, в зависимости от того, как было запущено приложение.
Эта функция была добавлена в Qt 4.1.
См. также applicationFilePath() и QCommandLineParser.
[static] bool QCoreApplication::closingDown()
Возвращает true, если объекты приложения уничтожаются; в противном случае возвращает false.
См. также startingUp().
[override virtual protected] bool QCoreApplication::event(QEvent *e)
Переопределяет QObject::event().
[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. Если сигнал (не с queued-подключением), подключённый к этому слоту, испускается до входа в основной цикл обработки событий (например, до вызова exec() в "int main"), слот не оказывает никакого эффекта, и приложение никогда не завершается. Использование queued-подключения гарантирует, что слот не будет вызван до входа в основной цикл обработки событий.
Обратите внимание, что в отличие от функции C-библиотеки с тем же именем, эта функция возвращается вызывающей стороне — это обработка событий останавливается.
void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
Устанавливает фильтр событий filterObj для всех нативных событий, получаемых приложением в главном потоке.
Фильтр событий filterObj получает события через свою функцию nativeEventFilter(), которая вызывается для всех нативных событий, полученных в главном потоке.
Функция QAbstractNativeEventFilter::nativeEventFilter() должна возвращать true, если событие должно быть отфильтровано, то есть остановлено. Она должна возвращать false, чтобы позволить нормальной обработке Qt продолжить: нативное событие затем может быть преобразовано в QEvent и обработано стандартным фильтром Qt event, например, 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) приложения.
Если экземпляр не был выделен, возвращается null.
[static] 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 будут обрабатываться в порядке их размещения.
Примечание: Эта функция безопасна для многопоточности.
Эта функция была введена в Qt 4.3.
См. также sendEvent(), notify(), sendPostedEvents() и Qt::EventPriority.
[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
Обрабатывает все ожидающие события для вызывающего потока в соответствии с указанными flags до тех пор, пока не останется больше событий для обработки.
Вы можете вызвать эту функцию время от времени, когда ваша программа занята выполнением длительной операции (например, копированием файла).
В случае, если вы запускаете локальный цикл, который непрерывно вызывает эту функцию без цикла обработки событий, события DeferredDelete не будут обрабатываться. Это может повлиять на поведение виджетов, например, QToolTip, которые полагаются на события DeferredDelete для правильной работы. Альтернативой будет вызов sendPostedEvents() внутри этого локального цикла.
Вызов этой функции обрабатывает события только для вызывающего потока.
Примечание: Эта функция безопасна для многопоточности.
См. также exec(), QTimer, QEventLoop::processEvents(), flush() и sendPostedEvents().
[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime)
Эта функция перегружает processEvents().
Обрабатывает ожидающие события для вызывающего потока в течение maxtime миллисекунд или до тех пор, пока не останется больше событий для обработки, в зависимости от того, что произойдёт раньше.
Вы можете вызвать эту функцию время от времени, когда ваша программа занята выполнением длительной операции (например, копированием файла).
Вызов этой функции обрабатывает события только для вызывающего потока.
Примечание: Эта функция безопасна для многопоточности.
См. также exec(), QTimer и QEventLoop::processEvents().
[static slot] void QCoreApplication::quit()
Указывает приложению выйти с кодом возврата 0 (успешно). Эквивалентно вызову QCoreApplication::exit(0).
Часто сигнал QGuiApplication::lastWindowClosed() подключают к quit(), а также часто подключают, например, QAbstractButton::clicked() или сигналы в QAction, QMenu или QMenuBar к нему.
Хорошей практикой является подключение сигналов к этому слоту с использованием QueuedConnection. Если сигнал, подключённый (не в очереди) к этому слоту, отправляется до того, как управление войдёт в основной цикл обработки событий (например, до вызова «int main» exec()), этот слот не имеет никакого эффекта, и приложение никогда не завершается. Использование подключённого в очереди слота гарантирует, что он не будет вызван до тех пор, пока управление не войдёт в основной цикл обработки событий.
Пример:
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()), Qt::QueuedConnection); См. также exit(), aboutToQuit() и QGuiApplication::lastWindowClosed().
[static] void QCoreApplication::removeLibraryPath(const QString &path)
Удаляет path из списка путей к библиотекам. Если path пустая или не находится в списке путей, список не меняется.
Пути к библиотекам сбрасываются до значения по умолчанию при уничтожении экземпляра QCoreApplication.
См. также addLibraryPath(), libraryPaths() и setLibraryPaths().
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 равен null, события типа eventType удаляются для всех объектов. Если eventType равно 0, все события удаляются для receiver. Вам никогда не следует вызывать эту функцию со значением eventType равным 0.
Примечание: Эта функция безопасна для многопоточности.
Данная функция была представлена в Qt 4.3.
[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 равно null, события типа event_type отправляются для всех объектов. Если event_type равно 0, все события отправляются для receiver.
Примечание: Этот метод должен вызываться из потока, в котором находится его параметр QObject, receiver.
См. также flush() и 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] 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 используется в разных ролях в одном и том же контексте. По умолчанию он равен null.
См. документацию по 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 = 0;
static void cleanup_ptr()
{
delete [] global_ptr;
global_ptr = 0;
}
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().
void qRemovePostRoutine(QtCleanUpFunction ptr)
Удаляет функцию очистки, указанную ptr, из списка функций, вызываемых деструктором QCoreApplication. Функция должна быть ранее добавлена в список вызовом qAddPostRoutine(), в противном случае эта функция не оказывает никакого влияния.
Примечание: Эта функция безопасна для потоков с Qt 5.10.
Примечание: Эта функция безопасна для потоков.
Эта функция была представлена в Qt 5.3.
См. также qAddPostRoutine().
Документация макросов
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() и trUtf8(), со следующими сигнатурами:
static inline QString tr(const char *sourceText,
const char *comment = 0);
static inline QString trUtf8(const char *sourceText,
const char *comment = 0); Этот макрос полезен, если вы хотите использовать QObject::tr() или QObject::trUtf8() в классах, которые не наследуются от QObject.
Q_DECLARE_TR_FUNCTIONS() должен появляться в самом начале определения класса (перед первой public: или protected:). Например:
class MyMfcView : public CView
{
Q_DECLARE_TR_FUNCTIONS(MyMfcView)
public:
MyMfcView();
...
}; Параметр context обычно является именем класса, но может быть любым текстом.
См. также Q_OBJECT, QObject::tr() и QObject::trUtf8().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qcoreapplication.html