Spec-Zone.ru › Qt

Класс QCoreApplication

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

Заголовок: #include <QCoreApplication>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Наследует: QObject
Наследуется:

QAndroidService и QGuiApplication

  • Список всех членов, включая наследуемые

Свойства

  • имяПриложения : 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 выйти(int returnCode = 0)
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()
bool installTranslator(QTranslator *translationFile)
QCoreApplication * instance()
bool isQuitLockEnabled()
bool isSetuidAllowed()
QStringList libraryPaths()
QString organizationDomain()
QString organizationName()
void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
void processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
void removeLibraryPath(const QString &path)
void removePostedEvents(QObject *receiver, int eventType = 0)
bool removeTranslator(QTranslator *translationFile)
bool sendEvent(QObject *receiver, QEvent *event)
void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
void setApplicationName(const QString &application)
void setApplicationVersion(const QString &version)
void setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
void setLibraryPaths(const QStringList &paths)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
void setQuitLockEnabled(bool enabled)
void setSetuidAllowed(bool allow)
bool startingUp()
bool testAttribute(Qt::ApplicationAttribute attribute)
QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

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

virtual bool event(QEvent *e) override

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

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

Макросы

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)
Q_DECLARE_TR_FUNCTIONS(context)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройки локали

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

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

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

applicationName : QString

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

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

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

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

QString applicationName()
void setApplicationName(const QString &application)

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

void applicationNameChanged()

См. также organizationName, organizationDomain, applicationVersion и applicationFilePath().

applicationVersion : QString

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

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

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

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

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

QString applicationVersion()
void setApplicationVersion(const QString &version)

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

void applicationVersionChanged()

См. также applicationName, organizationName и organizationDomain.

organizationDomain : QString

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

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

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

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

QString organizationDomain()
void setOrganizationDomain(const QString &orgDomain)

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

void organizationDomainChanged()

См. также organizationName, applicationName и applicationVersion.

organizationName : QString

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

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

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

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

QString organizationName()
void setOrganizationName(const QString &orgName)

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

void organizationNameChanged()

См. также organizationDomain и applicationName.

quitLockEnabled : bool

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

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

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

bool isQuitLockEnabled()
void setQuitLockEnabled(bool enabled)

См. также QEventLoopLocker.

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

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

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

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

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

[private signal] void QCoreApplication::aboutToQuit()

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

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

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

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

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

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

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

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

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

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

Также обратите внимание, что эта функция не является потокобезопасной. Её следует вызывать только из главного потока (потока, на котором объект QCoreApplication обрабатывает события). Чтобы попросить приложение завершиться из другого потока, используйте QCoreApplication::quit() или вызовите эту функцию из главного потока с помощью QMetaMethod::invokeMethod().

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

[static slot] void QCoreApplication::quit()

Запрашивает завершение работы приложения.

Запрос может быть проигнорирован, если приложение препятствует завершению, например, если одно из его окон не может быть закрыто. Приложение может повлиять на это, обработав событие QEvent::Quit на уровне приложения или события QEvent::Close для отдельных окон.

Если завершение не прервано, приложение завершится с кодом возврата 0 (успех).

Для завершения приложения без возможности прерывания, вызовите exit() напрямую. Обратите внимание, что этот метод не является потокобезопасным.

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

Пример:

QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);

Примечание по потоковой безопасности: эту функцию можно вызвать из любого потока, чтобы безопасно для потоков завершить текущий работающий главный цикл приложения. Однако гарантия потоковой безопасности не предоставляется, если объект QCoreApplication уничтожается одновременно.

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

См. также exit() и aboutToQuit().

[virtual] QCoreApplication::~QCoreApplication()

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

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

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

Стандартный список путей состоит из одного или двух элементов. Первый — это директория установки плагинов, которая является INSTALL/plugins, где INSTALL — это директория, где был установлен Qt. Второй — это директория приложения (не текущая директория), но только после создания объекта QCoreApplication.

Пути к библиотекам сбрасываются до стандартных при уничтожении экземпляра 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()

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

[static] QStringList QCoreApplication::arguments()

Возвращает список аргументов командной строки.

Обычно arguments().at(0) — имя программы, arguments().at(1) — первый аргумент, а arguments().last() — последний аргумент. См. примечание ниже о Windows.

Вызов этой функции медленный — при парсинге командной строки вы должны сохранить результат в переменной.

Предупреждение: В Unix этот список создаётся из параметров argc и argv, переданных конструктору в функции main(). Строковые данные в argv интерпретируются с помощью QString::fromLocal8Bit(); поэтому невозможно, например, передать японские аргументы командной строки на системе, работающей в локале Latin1. Большинство современных Unix-систем не имеют этого ограничения, так как они основаны на Unicode.

В Windows список создаётся из параметров argc и argv только если изменённые параметры argv/argc переданы конструктору. В этом случае могут возникнуть проблемы с кодировкой.

В противном случае, аргументы() конструируются из значения, возвращаемого GetCommandLine(). В результате, строка, заданная arguments().at(0), может не быть именем программы в Windows, в зависимости от того, как было запущено приложение.

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

[static] bool QCoreApplication::closingDown()

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

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

[override virtual protected] bool QCoreApplication::event(QEvent *e)

Переопределяет: QObject::event(QEvent *e).

[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()

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

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

[static] int QCoreApplication::exec()

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

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

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

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

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

[since 5.0] void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

Устанавливает фильтр событий filterObj для всех событий, получаемых приложением в главном потоке.

Фильтр событий filterObj получает события через свою функцию nativeEventFilter(), которая вызывается для всех событий, получаемых в главном потоке.

Функция QAbstractNativeEventFilter::nativeEventFilter() должна возвращать true, если событие должно быть отфильтровано, т.е. остановлено. Она должна возвращать false, чтобы разрешить продолжение обычной обработки Qt: нативное событие затем может быть преобразовано в QEvent и обработано стандартным Qt-фильтром событий, например, QObject::installEventFilter().

Если установлено несколько фильтров событий, то фильтр, установленный последним, активируется первым.

Примечание: Функция фильтрации здесь получает нативные сообщения, т.е. структуры событий MSG или XCB.

Примечание: Нативные фильтры событий будут отключены в приложении, когда установлен атрибут Qt::AA_PluginApplication.

Для максимальной портативности всегда следует использовать QEvent и QObject::installEventFilter() в случаях, когда это возможно.

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

См. также QObject::installEventFilter().

[static] bool QCoreApplication::installTranslator(QTranslator *translationFile)

Добавляет файл перевода translationFile в список файлов переводов, которые будут использоваться для переводов.

Можно установить несколько файлов переводов. Переводы ищутся в обратном порядке их установки, поэтому файл перевода, установленный последним, ищется в первую очередь, а первый установленный — в последнюю. Поиск прекращается, как только найдётся перевод, содержащий соответствующую строку.

Установка или удаление QTranslator или изменение установленного QTranslator генерирует событие LanguageChange для экземпляра QCoreApplication. Экземпляр QApplication будет распространять событие на все виджеты верхнего уровня, где переопределение changeEvent может повторно перевести пользовательский интерфейс, передавая видимые пользователю строки через функцию tr() соответствующим установщикам свойств. Виджеты, сгенерированные Qt Designer, предоставляют функцию retranslateUi(), которую можно вызвать.

Функция возвращает true при успехе и false при ошибке.

См. также removeTranslator(), translate(), QTranslator::load() и Динамический перевод.

[static] QCoreApplication *QCoreApplication::instance()

Возвращает указатель на экземпляр QCoreApplication (или QGuiApplication/QApplication) приложения.

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

[static, since 5.3] bool QCoreApplication::isSetuidAllowed()

Возвращает true, если приложение разрешено запускать setuid на платформах UNIX.

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

См. также QCoreApplication::setSetuidAllowed().

[static] QStringList QCoreApplication::libraryPaths()

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

Возвращаемое значение этой функции может изменяться при создании QCoreApplication. Не рекомендуется вызывать её до создания QCoreApplication. Директория исполняемого файла приложения (а не текущая рабочая директория) входит в список, если она известна. Для того чтобы она стала известной, необходимо создать QCoreApplication, поскольку он будет использовать argv[0] для её определения.

Qt предоставляет стандартные пути к библиотекам, но их также можно задать с помощью файла qt.conf. Пути, указанные в этом файле, переопределяют значения по умолчанию. Обратите внимание, что если файл qt.conf находится в директории исполняемого файла приложения, он может не быть найден до создания QCoreApplication. Если он не найден при вызове этой функции, будут использованы стандартные пути к библиотекам.

Список будет включать каталог установки плагинов, если он существует (стандартный каталог установки плагинов — INSTALL/plugins, где INSTALL — директория установки Qt). Двоеточием разделенные записи переменной среды QT_PLUGIN_PATH всегда добавляются. Каталог установки плагинов (и его существование) могут изменяться, когда становится известной директория исполняемого файла приложения.

Если вы хотите перебрать список, вы можете использовать псевдослово foreach:

foreach (const QString &path, app.libraryPaths())
    do_something(path);

См. также setLibraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary и Как создать плагины Qt.

[virtual] bool QCoreApplication::notify(QObject *receiver, QEvent *event)

Отправляет event объекту receiver: receiver->event(event). Возвращает значение, возвращённое обработчиком события получателя. Обратите внимание, что эта функция вызывается для всех событий, отправленных любому объекту в любом потоке.

Для определённых типов событий (например, событий мыши и нажатия клавиш) событие будет распространено на родительский объект получателя и так далее до объекта верхнего уровня, если получатель не заинтересован в событии (т.е. он возвращает false).

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

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

Событие должно быть выделено в куче, так как очередь событий postEvent будет брать на себя владение событием и удалит его после того, как оно будет опубликовано. После публикации доступа к событию нет.

Когда управление возвращается к главному циклу событий, все события, хранящиеся в очереди, отправляются с помощью функции notify().

События сортируются в порядке убывания priority, т.е. события с высоким priority помещаются в очередь перед событиями с низким priority. Priority может быть любым целочисленным значением, т.е. от INT_MAX до INT_MIN включительно; см. Qt::EventPriority для получения дополнительной информации. События с одинаковым priority будут обрабатываться в порядке их публикации.

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

См. также sendEvent(), notify(), sendPostedEvents() и Qt::EventPriority.

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)

Обрабатывает некоторые ожидающие события в вызывающем потоке в соответствии с указанными флагами flags.

Использование этой функции не рекомендуется. Вместо этого предпочтительнее вынести длительные операции из потока GUI в вспомогательный поток и полностью избежать вложенной обработки цикла событий. Если обработка событий действительно необходима, рассмотрите использование QEventLoop вместо этого.

В случае, если вы запускаете локальный цикл, который постоянно вызывает эту функцию без цикла событий, события DeferredDelete не будут обрабатываться. Это может повлиять на поведение виджетов, например, QToolTip, которые полагаются на события DeferredDelete для нормальной работы. Альтернативой будет вызов sendPostedEvents() внутри этого локального цикла.

Вызов этой функции обрабатывает события только для вызывающей нити и возвращает после обработки всех доступных событий. Доступные события — это события, помещённые в очередь перед вызовом функции. Это означает, что события, которые публикуются во время выполнения функции, будут помещены в очередь до следующего цикла обработки событий.

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

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

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)

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

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

Использование этой функции не рекомендуется. Вместо этого предпочтительнее перемещать длительные операции из GUI-нити в вспомогательную и полностью избегать вложенной обработки цикла событий. Если обработка событий всё же необходима, рассмотрите использование QEventLoop вместо этого.

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

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

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

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

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

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

Удаляет path из списка путей к библиотекам. Если path пуста или отсутствует в списке путей, список не изменяется.

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

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

[since 5.0] void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)

Удаляет объект фильтра событий filterObject из этого объекта. Запрос игнорируется, если такой фильтр событий не был установлен.

Все фильтры событий для этого объекта автоматически удаляются при уничтожении этого объекта.

Удаление фильтра событий всегда безопасно, даже во время активации фильтра событий (т.е. из функции nativeEventFilter()).

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

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

[static] void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)

Удаляет все события заданного типа eventType, которые были опубликованы с помощью postEvent() для receiver.

События не обрабатываются, а удаляются из очереди. Вам никогда не нужно вызывать эту функцию. Если вы её вызываете, имейте в виду, что удаление событий может нарушить один или несколько инвариантов receiver.

Если receiver равен nullptr, события типа eventType удаляются для всех объектов. Если eventType равно 0, все события удаляются для receiver. Вам никогда не следует вызывать эту функцию с eventType равным 0.

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

[static] bool QCoreApplication::removeTranslator(QTranslator *translationFile)

Удаляет файл перевода translationFile из списка файлов переводов, используемых этим приложением. (Файл перевода не удаляется из файловой системы.)

Функция возвращает true при успешном выполнении и false при ошибке.

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

[static] bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)

Отправляет событие event напрямую получателю receiver, используя функцию notify(). Возвращает значение, возвращённое обработчиком события.

Событие не удаляется после отправки. Обычно событие создаётся на стеке, например:

QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0);
QApplication::sendEvent(mainWindow, &event);

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

[static] void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)

Немедленно отправляет все события, которые были ранее помещены в очередь с помощью QCoreApplication::postEvent(), и которые относятся к объекту receiver и имеют тип события event_type.

События из системы окон не отправляются этой функцией, а отправляются функцией processEvents().

Если receiver равно nullptr, события типа event_type отправляются для всех объектов. Если event_type равно 0, все события отправляются для receiver.

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

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

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

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

Примечание: Некоторые атрибуты приложения должны быть установлены до создания экземпляра QCoreApplication. Для получения дополнительной информации обратитесь к документации по Qt::ApplicationAttribute.

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

[static] void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)

Устанавливает диспетчер событий для основной нити в eventDispatcher. Это возможно только до тех пор, пока диспетчер событий ещё не установлен. То есть, до создания экземпляра QCoreApplication. Этот метод принимает владение объектом.

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

[static] void QCoreApplication::setLibraryPaths(const QStringList &paths)

Устанавливает список каталогов для поиска плагинов с помощью QLibrary в paths. Все существующие пути будут удалены, и список путей будет содержать пути, заданные в paths, и путь к приложению.

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

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

[static, since 5.3] void QCoreApplication::setSetuidAllowed(bool allow)

Разрешает приложению запуск setuid на платформах UNIX, если allow равно true.

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

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

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

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

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

[static] bool QCoreApplication::startingUp()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void qAddPostRoutine(QtCleanUpFunction ptr)

Добавляет глобальную процедуру, которая будет вызываться из деструктора QCoreApplication. Эта функция обычно используется для добавления процедур завершения для функциональности всего приложения.

Процедуры завершения вызываются в обратном порядке их добавления.

Функция, указанная ptr, не должна принимать аргументы и не должна возвращать ничего. Например:

static int *global_ptr = nullptr;

static void cleanup_ptr()
{
    delete [] global_ptr;
    global_ptr = nullptr;
}

void init_ptr()
{
    global_ptr = new int[100];      // allocate data
    qAddPostRoutine(cleanup_ptr);   // delete later
}

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

Для модулей и библиотек использование менеджера инициализации с подсчетом ссылок или механизма удаления родитель-потомок Qt может быть предпочтительнее. Вот пример частного класса, который использует механизм родитель-потомок для вызова функции завершения в нужное время:

class MyPrivateInitStuff : public QObject
{
public:
    static MyPrivateInitStuff *initStuff(QObject *parent)
    {
        if (!p)
            p = new MyPrivateInitStuff(parent);
        return p;
    }

    ~MyPrivateInitStuff()
    {
        // cleanup goes here
    }

private:
    MyPrivateInitStuff(QObject *parent)
        : QObject(parent)
    {
        // initialization goes here
    }

    MyPrivateInitStuff *p;
};

Выбирая нужный родительский объект, это часто можно сделать, чтобы очистить данные модуля в нужное время.

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

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

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

[since 5.3] void qRemovePostRoutine(QtCleanUpFunction ptr)

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

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

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

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

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

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

[since 5.1] Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)

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

Функция, указанная ptr, не должна принимать аргументы и не должна возвращать ничего. Например:

// Called once QCoreApplication exists
static void preRoutineMyDebugTool()
{
    MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance());
    QCoreApplication::instance()->installEventFilter(tool);
}

Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)

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

Если QCoreApplication удаляется и создается другой QCoreApplication, функция запуска будет вызвана снова.

Примечание: Этот макрос не подходит для использования в коде библиотек, которые затем статически подключаются к приложению, поскольку функция может вообще не быть вызвана из-за удаления ее линковщиком.

Примечание: Эта функция рекурсивна.

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

Q_DECLARE_TR_FUNCTIONS(context)

Макрос Q_DECLARE_TR_FUNCTIONS() объявляет и реализует функцию перевода tr() с этим сигнатуром:

static inline QString tr(const char *sourceText,
                         const char *comment = nullptr);

Этот макрос полезен, если вы хотите использовать QObject::tr() в классах, которые не наследуются от QObject.

Q_DECLARE_TR_FUNCTIONS() должен находиться в самом начале определения класса (перед первым public: или protected:). Например:

class MyMfcView : public CView
{
    Q_DECLARE_TR_FUNCTIONS(MyMfcView)

public:
    MyMfcView();
    ...
};

Параметр context обычно является именем класса, но может быть любым текстом.

См. также Q_OBJECT и QObject::tr().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qcoreapplication.html

Spec-Zone.ru

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