Spec-Zone.ru › Qt 5.13

Класс QCoreApplication

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

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

Свойства

  • имяПриложения : QString
  • версияПриложения : QString
  • доменОрганизации : QString
  • названиеОрганизации : QString
  • заблокироватьЗакрытие : bool

Открытые функции

QCoreApplication(int &argc, char **argv)
virtual ~QCoreApplication()
void установитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObj)
virtual bool уведомить(QObject *receiver, QEvent *event)
void удалитьНативныйФильтрСобытий(QAbstractNativeEventFilter *filterObject)

Открытые слоты

void завершить()

Сигналы

void о_завершении()
void изменилосьИмяПриложения()
void измениласьВерсияПриложения()
void изменилсяДоменОрганизации()
void изменилосьНазваниеОрганизации()

Статические открытые члены

void addLibraryPath(const QString &path)
QString applicationDirPath()
QString applicationFilePath()
QString applicationName()
qint64 applicationPid()
QString applicationVersion()
QStringList arguments()
bool closingDown()
QAbstractEventDispatcher * eventDispatcher()
int exec()
void exit(int returnCode = 0)
bool installTranslator(QTranslator *translationFile)
QCoreApplication * instance()
bool isQuitLockEnabled()
bool isSetuidAllowed()
QStringList libraryPaths()
QString organizationDomain()
QString organizationName()
void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
void processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
void removeLibraryPath(const QString &path)
void removePostedEvents(QObject *receiver, int eventType = 0)
bool removeTranslator(QTranslator *translationFile)
bool sendEvent(QObject *receiver, QEvent *event)
void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
void setApplicationName(const QString &application)
void setApplicationVersion(const QString &version)
void setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
void setLibraryPaths(const QStringList &paths)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
void setQuitLockEnabled(bool enabled)
void setSetuidAllowed(bool allow)
bool startingUp()
bool testAttribute(Qt::ApplicationAttribute attribute)
QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

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

virtual bool event(QEvent *e) override

Связанные нечленные функции

void qAddPostRoutine(QtCleanUpFunction ptr)
void qRemovePostRoutine(QtCleanUpFunction ptr)

Макросы

Q_COREAPP_STARTUP_FUNCTION(ptr)
Q_DECLARE_TR_FUNCTIONS(context)

Подробное описание

Этот класс используется для неграфических приложений, чтобы обеспечить их цикл обработки событий. Для приложений на Qt без графического интерфейса должен быть ровно один объект QCoreApplication. Для графических приложений см. QGuiApplication. Для приложений, использующих модуль Qt Widgets, см. QApplication.

QCoreApplication содержит главный цикл обработки событий, где обрабатываются и передаются все события от операционной системы (например, события таймера и сетевые события) и других источников. Он также обрабатывает инициализацию и завершение приложения, а также системные и прикладные настройки.

Цикл обработки событий и обработка событий

Цикл обработки событий запускается с помощью вызова exec(). Для работы с длительными операциями можно использовать processEvents(), чтобы поддерживать отзывчивость приложения.

В целом, рекомендуется создавать объект QCoreApplication, QGuiApplication или QApplication в вашей функции main() как можно раньше. exec() вернёт значение, только когда цикл обработки событий завершится; например, когда вызовется quit().

Также предоставлены несколько удобных статических функций. Объект QCoreApplication доступен из instance(). События могут быть отправлены с помощью sendEvent() или размещены в очереди событий с помощью postEvent(). Ожидающие события могут быть удалены с помощью removePostedEvents() или обработаны с помощью sendPostedEvents().

Класс предоставляет слот quit() и сигнал aboutToQuit().

Пути к приложениям и библиотекам

Приложение имеет applicationDirPath() и applicationFilePath(). Пути к библиотекам (см. QLibrary) можно получить с помощью libraryPaths() и изменить с помощью setLibraryPaths(), addLibraryPath() и removeLibraryPath().

Локализация и Переводы

Файлы перевода можно добавить или удалить, используя installTranslator() и removeTranslator(). Строки приложения можно перевести, используя translate(). Функции QObject::tr() и QObject::trUtf8() реализованы через translate().

Доступ к аргументам командной строки

Аргументы командной строки, передаваемые конструктору QCoreApplication, следует получать с помощью функции arguments().

Примечание: QCoreApplication удаляет опцию -qmljsdebugger="...". Он анализирует аргумент qmljsdebugger, а затем удаляет эту опцию и её аргумент.

Для более сложной обработки опций командной строки создайте QCommandLineParser.

Параметры локали

В Qt на Unix/Linux по умолчанию используются системные параметры локали. Это может привести к конфликтам при использовании функций POSIX, например, при преобразовании между типами данных, такими как float и строки, так как обозначение может отличаться в зависимости от локали. Чтобы обойти эту проблему, вызовите функцию POSIX setlocale(LC_NUMERIC,"C") сразу после инициализации QApplication, QGuiApplication или QCoreApplication, чтобы сбросить локаль для форматирования чисел на "C"-локаль.

См. также QGuiApplication, QAbstractEventDispatcher, QEventLoop, Пример с семафорами и Пример с условиями ожидания.

Документация по свойствам

Имя приложения : QString

Это свойство содержит имя этого приложения.

Значение используется классом QSettings при создании с пустым конструктором. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.

Если не задано, имя приложения по умолчанию - имя исполняемого файла (с версии 5.0).

Функции доступа:

QString Имя приложения()
void УстановитьИмяПриложения(const QString &application)

Сигнал уведомления:

void ИмяПриложенияИзменилось()

См. также организацияName, организацияDomain, applicationVersion и applicationFilePath().

Версия приложения : QString

Это свойство содержит версию этого приложения.

Если не задано, версия приложения по умолчанию - платформа-специфическое значение, определяемое из основного исполняемого файла или пакета (с Qt 5.9):

Платформа Источник
Windows (классический рабочий стол) Параметр PRODUCTVERSION ресурса VERSIONINFO
Универсальная платформа Windows Атрибут version манифеста пакета приложения
macOS, iOS, tvOS, watchOS Свойство CFBundleVersion списка свойств информации
Android Свойство android:versionName элемента манифеста AndroidManifest.xml

На других платформах значение по умолчанию - пустая строка.

Это свойство было добавлено в Qt 4.4.

Функции доступа:

QString Версия приложения()
void УстановитьВерсиюПриложения(const QString &version)

Сигнал уведомления:

void ВерсияПриложенияИзменилась()

См. также Имя приложения, Имя организации и Домен организации.

Домен организации : QString

Это свойство содержит домен в интернете организации, которая написала это приложение.

Значение используется классом QSettings при создании с пустым конструктором. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.

На Mac, QSettings использует organizationDomain(), если оно не пустая строка, в противном случае использует organizationName(). На всех других платформах QSettings использует organizationName() в качестве организации.

Функции доступа:

QString Домен организации()
void УстановитьДоменОрганизации(const QString &orgDomain)

Сигнал уведомления:

void ДоменОрганизацииИзменился()

См. также Имя организации, Имя приложения и Версия приложения.

Имя организации : QString

Это свойство содержит имя организации, которая написала это приложение.

Значение используется классом QSettings при создании с пустым конструктором. Это позволяет избежать повторения этой информации каждый раз при создании объекта QSettings.

На Mac, QSettings использует organizationDomain() в качестве организации, если оно не пустая строка, в противном случае использует organizationName(). На всех других платформах QSettings использует organizationName() в качестве организации.

Функции доступа:

QString Имя организации()
void УстановитьИмяОрганизации(const QString &orgName)

Сигнал уведомления:

void ИмяОрганизацииИзменилось()

См. также Домен организации и Имя приложения.

Включить блокировку завершения : bool

Это свойство определяет, может ли использование QEventLoopLocker привести к завершению приложения.

Значение по умолчанию - true.

Функции доступа:

bool БлокировкаЗавершенияВключена()
void УстановитьБлокировкуЗавершения(bool enabled)

См. также QEventLoopLocker.

Документация по членам-функциям

QCoreApplication::QCoreApplication(int &argc, char **argv)

Создает приложение Qt ядра. Приложения ядра - это приложения без графического интерфейса пользователя. Такие приложения используются в консоли или в качестве процессов сервера.

Аргументы argc и argv обрабатываются приложением и предоставляются в более удобном виде функцией arguments().

Предупреждение: Данные, на которые ссылаются argc и argv, должны оставаться валидными на протяжении всего жизненного цикла объекта QCoreApplication. Кроме того, argc должно быть больше нуля, а argv - содержать по крайней мере одну валидную строку символов.

[signal] void QCoreApplication::aboutToQuit()

Этот сигнал излучается, когда приложение собирается выйти из основного цикла событий, например, когда уровень цикла событий уменьшается до нуля. Это может произойти либо после вызова quit() изнутри приложения, либо при выключении всей сессии рабочего стола пользователем.

Сигнал особенно полезен, если вашему приложению нужно выполнить некоторую очистку в последнюю секунду. Обратите внимание, что в этом состоянии взаимодействие пользователя невозможно.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может быть испущен пользователем.

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

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

[virtual] QCoreApplication::~QCoreApplication()

Уничтожает объект QCoreApplication.

[static] void QCoreApplication::addLibraryPath(const QString &path)

Добавляет path в начало списка пути к библиотекам, гарантируя, что он будет проверяться первым при поиске библиотек. Если path пустое или уже в списке, список путей не изменяется.

Список путей по умолчанию состоит из одного элемента — директории установки плагинов. По умолчанию директория установки плагинов — INSTALL/plugins, где INSTALL — директория, в которой был установлен Qt.

Пути к библиотекам сбрасываются до значений по умолчанию при уничтожении экземпляра QCoreApplication.

См. также removeLibraryPath(), libraryPaths() и setLibraryPaths().

[static] QString QCoreApplication::applicationDirPath()

Возвращает директорию, в которой находится исполняемый файл приложения.

Например, если Qt установлен в директории C:\Qt, а вы запускаете пример regexp, эта функция вернёт «C:/Qt/examples/tools/regexp».

В macOS и iOS эта функция укажет на директорию, фактически содержащую исполняемый файл, которая может находиться внутри пакета приложения (если приложение упаковано).

Предупреждение: В Linux эта функция попытается получить путь из /proc файловой системы. Если это не удастся, она предполагает, что argv[0] содержит абсолютный путь к исполняемому файлу. Функция также предполагает, что текущая директория не была изменена приложением.

См. также applicationFilePath().

[static] QString QCoreApplication::applicationFilePath()

Возвращает путь к исполняемому файлу приложения.

Например, если Qt установлен в директории /usr/local/qt, а вы запускаете пример regexp, эта функция вернёт «/usr/local/qt/examples/tools/regexp/regexp».

Предупреждение: В Linux эта функция попытается получить путь из /proc файловой системы. Если это не удастся, она предполагает, что argv[0] содержит абсолютный путь к исполняемому файлу. Функция также предполагает, что текущая директория не была изменена приложением.

См. также applicationDirPath().

[static] qint64 QCoreApplication::applicationPid()

Возвращает текущий идентификатор процесса приложения.

Эта функция была представлена в 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(QEvent *e).

[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()

Возвращает указатель на объект диспетчера событий для основного потока. Если диспетчер событий для потока не существует, эта функция возвращает nullptr.

См. также setEventDispatcher().

[static] int QCoreApplication::exec()

Входит в основной цикл событий и ожидает, пока не будет вызвано exit(). Возвращает значение, которое было передано в exit() (которое равно 0, если exit() был вызван через quit()).

Необходимо вызвать эту функцию для запуска обработки событий. Основной цикл событий получает события от системы окон и рассылает их виджетам приложения.

Для выполнения обработки задач в режиме ожидания (выполняя специальную функцию, когда нет ожидающих событий), используйте QTimer с тайм-аутом 0. Более сложные схемы обработки задач в режиме ожидания могут быть реализованы с помощью processEvents().

Рекомендуется подключать код очистки к сигналу aboutToQuit(), а не помещать его в функцию main() приложения, потому что на некоторых платформах вызов exec() может не возвращаться. Например, в Windows, когда пользователь выходит из системы, система завершает процесс после того, как Qt закрывает все окна верхнего уровня. Следовательно, нет гарантии, что приложение успеет завершить свой цикл событий и выполнить код в конце функции main() после вызова exec().

См. также quit(), exit(), processEvents() и QApplication::exec().

[static] void QCoreApplication::exit(int returnCode = 0)

Указывает приложению завершиться с кодом возврата.

После вызова этой функции приложение покидает основной цикл событий и возвращается из вызова exec(). Функция exec() возвращает returnCode. Если цикл событий не работает, эта функция ничего не делает.

По соглашению, returnCode 0 означает успех, а любое ненулевое значение указывает на ошибку.

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

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

См. также 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) приложения.

Если экземпляр не был выделен, возвращается nullptr.

[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 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 ms)

Эта функция перегружает processEvents().

Обрабатывает ожидающие события для вызывающей нити в течение ms миллисекунд или до тех пор, пока не закончатся события для обработки, в зависимости от того, что наступит раньше.

Вы можете вызывать эту функцию время от времени, когда ваша программа выполняет длительную операцию (например, копирование файла).

Вызов этой функции обрабатывает события только для вызывающей нити.

Примечание: В отличие от перегрузки processEvents(), эта функция также обрабатывает события, которые были размещены во время выполнения функции.

Примечание: Эта функция является потокобезопасной.

См. также exec(), QTimer и QEventLoop::processEvents().

[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 является nullptr, события типа 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 является nullptr, события типа event_type отправляются для всех объектов. Если event_type равно 0, все события отправляются для receiver.

Примечание: Этот метод должен вызываться из той нити, в которой находится его параметр QObject, receiver.

См. также flush() и postEvent().

[static] void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)

Устанавливает атрибут attribute, если on истинно; в противном случае очищает атрибут.

Примечание: Некоторые атрибуты приложения должны быть установлены до создания экземпляра 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 истинно.

Если allow ложно (по умолчанию), и Qt обнаруживает, что приложение запущено с эффективным идентификатором пользователя, отличным от реального идентификатора пользователя, приложение будет прервано при создании экземпляра QCoreApplication.

Qt не является подходящим решением для программ setuid из-за большой поверхности атак. Однако некоторые приложения могут потребоваться для работы в таком режиме по историческим причинам. Этот флаг предотвратит прерывание приложения Qt при обнаружении этого, и он должен быть установлен до создания экземпляра QCoreApplication.

Примечание: Сильно рекомендуется не включать этот параметр, так как он вводит риски безопасности.

Эта функция была введена в Qt 5.3.

См. также isSetuidAllowed().

[static] bool QCoreApplication::startingUp()

Возвращает true если объект приложения еще не создан; в противном случае возвращает false.

См. также closingDown().

[static] bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)

Возвращает true если атрибут attribute установлен; в противном случае возвращает false.

См. также setAttribute().

[static] QString QCoreApplication::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

Возвращает текст перевода для sourceText, запрашивая установленные файлы перевода. Файлы переводов ищутся от последнего установленного файла обратно к первому установленному файлу.

QObject::tr() предоставляет эту функциональность более удобным способом.

context обычно является именем класса (например, "MyDialog"), а sourceText - это либо английский текст, либо короткий идентифицирующий текст.

disambiguation - это идентифицирующая строка, для случаев, когда один и тот же sourceText используется в разных ролях в рамках одного контекста. По умолчанию это nullptr.

END_OF_DOCUMENT_MARKER

См. документацию по QTranslator и QObject::tr() для получения дополнительной информации о контекстах, устранении неоднозначностей и комментариях.

n используется совместно с %n для поддержки множественного числа. См. QObject::tr() для подробностей.

Если ни один из файлов перевода не содержит перевода для sourceText в context, эта функция возвращает QString, эквивалентный sourceText.

Эта функция не является виртуальной. Вы можете использовать альтернативные методы перевода, наследуя от QTranslator.

Примечание: Эта функция безопасна в многопоточном доступе.

См. также QObject::tr(), installTranslator(), removeTranslator() и translate().

Связанные нечлены

void QCoreApplication::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 QCoreApplication::qRemovePostRoutine(QtCleanUpFunction ptr)

Удаляет процедуру завершения, указанную параметром ptr, из списка процедур, вызываемых деструктором QCoreApplication. Процедура должна быть предварительно добавлена в список с помощью вызова qAddPostRoutine(), в противном случае эта функция не оказывает никакого влияния.

Примечание: Эта функция безопасна в многопоточном доступе с Qt 5.10.

Примечание: Эта функция безопасна в многопоточном доступе.

Эта функция была представлена в Qt 5.3.

См. также qAddPostRoutine().

Документация макросов

QCoreApplication::Q_COREAPP_STARTUP_FUNCTION(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.

QCoreApplication::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.13/qcoreapplication.html

Spec-Zone.ru

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