Класс QCoreApplication
Класс QCoreApplication предоставляет цикл обработки событий для приложений Qt без графического интерфейса. Подробнее...
| Заголовок: | #include <QCoreApplication> |
| qmake: | QT += core |
| Наследуется от: | QObject |
| Наследует: |
Свойства
|
|
- 1 свойство унаследовано от QObject
Открытые функции
| QCoreApplication(int &argc, char **argv) | |
| ~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 = Q_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 | запускается() |
| bool | тестироватьАтрибут(Qt::ApplicationAttribute attribute) |
| QString | перевести(const char *context, const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) |
- 11 статических публичных членов, унаследованных от 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, Пример с семафорами и Пример с условиями ожидания.
Документация свойств
applicationName : QString
Это свойство содержит имя данного приложения.
Значение используется классом QSettings при создании объекта с пустым конструктором. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.
Если не задано, имя приложения по умолчанию — имя исполняемого файла (начиная с версии 5.0).
Функции доступа:
| QString | applicationName() |
| void | setApplicationName(const QString &application) |
См. также organizationName, organizationDomain, applicationVersion и applicationFilePath.
applicationVersion : QString
Это свойство содержит версию данного приложения.
Если не задано, версия приложения по умолчанию — платформа-зависимое значение, определяемое из исполняемого файла или пакета основного приложения (начиная с Qt 5.9):
| Платформа | Источник |
|---|---|
| Windows (классический настольный ПК) | Параметр PRODUCTVERSION ресурса VERSIONINFO |
| Universal Windows Platform | Атрибут 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 — содержать по меньшей мере одну валидную строку символов.
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 передаются конструктору. В этом случае могут возникнуть проблемы с кодировкой.
В противном случае аргументы arguments() строятся из значения, возвращаемого GetCommandLine(). В результате этого строка, возвращаемая arguments().at(0), может не быть именем программы в Windows, в зависимости от того, как приложение было запущено.
Эта функция была представлена в Qt 4.1.
См. также applicationFilePath() и QCommandLineParser.
[static] bool QCoreApplication::closingDown()
Возвращает true если объекты приложения уничтожаются; в противном случае возвращает false.
См. также startingUp().
[virtual protected] bool QCoreApplication::event(QEvent *e)
Переопределено из QObject::event().
[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()
Возвращает указатель на объект диспетчера событий для основного потока. Если для потока нет диспетчера событий, эта функция возвращает 0.
См. также 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 означает успех, а любое ненулевое значение указывает на ошибку.
Обратите внимание, что в отличие от одноимённой функции C-библиотеки, эта функция возвращает управление вызывающей стороне — останавливается обработка событий.
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) приложения.
Если экземпляр не был выделен, возвращается 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 будет принимать событие на владение и удалять его после того, как оно будет размещено. После размещения обращаться к событию не безопасно.
Когда управление возвращается в основной цикл обработки событий, все события, хранящиеся в очереди, будут отправлены с помощью функции 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 к нему.
Пример:
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit())); См. также 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. Если вы это сделаете, помните, что уничтожение событий может нарушить один или несколько инвариантов receiver.
Примечание: Эта функция безопасна для использования в нескольких потоках.
Эта функция была добавлена в 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 = Q_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; в противном случае очищает атрибут.
См. также 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 = Q_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().
Связанные нечлен-функции
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;
}; Выбрав правильный родительский объект, это часто позволяет очистить данные модуля в нужное время.
См. также qRemovePostRoutine().
void qRemovePostRoutine(QtCleanUpFunction ptr)
Удаляет процедуру очистки, указанную параметром ptr, из списка процедур, вызываемых деструктором QCoreApplication. Процедура должна была быть ранее добавлена в список вызовом qAddPostRoutine(), иначе эта функция не имеет эффекта.
Эта функция была введена в 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.9/qcoreapplication.html