Spec-Zone.ru › Qt 5.11

Класс QCoreApplication

Класс QCoreApplication предоставляет цикл обработки событий для приложений Qt без графического интерфейса. Подробнее...

Заголовок: #include <QCoreApplication>
qmake: QT += core
Наследует: QObject
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Свойства

  • имяПриложения : QString
  • версияПриложения : QString
  • доменОрганизации : QString
  • названиеОрганизации : QString
  • заблокироватьВыход : bool
  • 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 разрешеноIsSetuid()
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 разрешитьIsSetuid(bool allow)
bool начало()
bool проверитьАтрибут(Qt::ApplicationAttribute attribute)
QString перевести(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)
  • 11 статических открытых членов унаследованы от QObject
END_OF_DOCUMENT_MARKER

Реализованные защищённые функции

virtual bool event(QEvent *e) override
  • 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.

Если не задано, имя приложения по умолчанию — имя исполняемого файла (с 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 переданы конструктору. В этом случае могут возникнуть проблемы с кодировкой.

В противном случае аргументы arguments() строятся из возвращаемого значения 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()

Возвращает указатель на объект диспетчера событий для основного потока. Если для потока нет диспетчера событий, эта функция возвращает 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 означает успех, а любое ненулевое значение указывает на ошибку.

Рекомендуется всегда подключать сигналы к этому слоту, используя QueuedConnection. Если сигнал, подключенный (не используя очереди) к этому слоту, генерируется до того, как управление переходит в основной цикл обработки событий (например, до того, как "int main" вызывает exec()), слот не оказывает никакого влияния, и приложение никогда не завершается. Использование подключений через очередь гарантирует, что слот не будет вызван до тех пор, пока управление не перейдет в основной цикл обработки событий.

Обратите внимание, что в отличие от одноимённой функции из C-библиотеки, эта функция возвращается вызывающему коду — это обработка событий останавливается.

См. также quit() и exec().

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).

Существует пять различных способов обработки событий; переопределение этой виртуальной функции — всего лишь один из них. Все пять подходов перечислены ниже:

  1. Переопределение paintEvent(), mousePressEvent() и т. д. Это наиболее распространённый, простой и наименее мощный способ.
  2. Переопределение этой функции. Это очень мощный способ, предоставляющий полный контроль; но только один подкласс может быть активным одновременно.
  3. Установка фильтра событий на QCoreApplication::instance(). Такой фильтр событий способен обрабатывать все события для всех виджетов, поэтому он столь же мощный, как переопределение notify(); кроме того, можно иметь более одного глобального фильтра событий для приложения. Глобальные фильтры событий видят даже события мыши для отключенных виджетов. Обратите внимание, что фильтры событий приложения вызываются только для объектов, существующих в главном потоке.
  4. Переопределение QObject::event() (как делает QWidget). Если вы сделаете это, вы получите нажатия клавиши Tab, и вы увидите события до любого виджета-специфичного фильтра событий.
  5. Установка фильтра событий на объект. Такой фильтр событий получает все события, включая нажатия клавиш 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 к нему.

Рекомендуется всегда подключать сигналы к этому слоту с помощью 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. Если вы это сделаете, помните, что удаление событий может привести к нарушению одного или нескольких инвариантов 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 = 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 = 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/archives/qt-5.11/qcoreapplication.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API