Spec-Zone.ru › Qt 5.15

Класс 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(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() и QObject::trUtf8() реализованы через translate().

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

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

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

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

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

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

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

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

applicationName : QString

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

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

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

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

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

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

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.

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

[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, &QPushButton::clicked, &app, &QCoreApplication::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 = 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().

void qRemovePostRoutine(QtCleanUpFunction ptr)

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

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

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

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

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

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

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)

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

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

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

Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)

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

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

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

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

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

Q_DECLARE_TR_FUNCTIONS(context)

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

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

Этот макрос полезен, если вы хотите использовать 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.15/qcoreapplication.html

Spec-Zone.ru

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