Spec-Zone.ru › Qt 5.14

Класс QCoreApplication

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

Заголовок: #include <QCoreApplication>
qmake: QT += core
Наследует: QObject
Наследуется от:

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 завершить()

Сигналы

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

END_OF_DOCUMENT_MARKER

Международный язык и переводы

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

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

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

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

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

Настройки региональных параметров

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

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

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

applicationName : QString

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

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

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

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

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

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

void applicationNameChanged()

См. также 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)

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

void applicationVersionChanged()

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

organizationDomain : QString

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

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

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

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

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

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

void organizationDomainChanged()

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

organizationName : QString

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

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

В macOS, 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 должно содержать по крайней мере одну допустимую строку символов.

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

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

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

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

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

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

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

[static] void QCoreApplication::setSetuidAllowed(bool allow)

Разрешает программе запуск с установкой идентификатора пользователя (setuid) на платформах UNIX, если allow равно true.

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

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

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

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

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

[static] bool QCoreApplication::startingUp()

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

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

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

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

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

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

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

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

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

disambiguation – это идентифицирующая строка, для случаев, когда один и тот же sourceText используется в разных ролях в одном и том же контексте. По умолчанию он равен 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 = 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(ptr)

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

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

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

Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)

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

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

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

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

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

Q_DECLARE_TR_FUNCTIONS(context)

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

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

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

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

class MyMfcView : public CView
{
    Q_DECLARE_TR_FUNCTIONS(MyMfcView)

public:
    MyMfcView();
    ...
};

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

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

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

Spec-Zone.ru

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