Qt - Что такое QApplication, просто? - PullRequest
6 голосов
/ 24 апреля 2011

Я видел описание QApplication в документации Qt, но не совсем ясно.

Можете ли вы просто просто описать, что он в основном делает?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 24 апреля 2011

Самое важное, что нужно знать о QApplication, это то, что его метод exec выполняет цикл обработки событий, который в основном представляет собой часть программного обеспечения, которая заставляет слоты и сигналы работать.просто, если нет запущенного цикла обработки событий, события, сгенерированные вашими компонентами GUI, вообще не будут распространяться, поэтому ваш пользовательский интерфейс просто ничего не сделает.

1 голос
/ 24 апреля 2011

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

0 голосов
/ 18 марта 2019

TL; DR

Q*Application - это базовый класс, необходимый для обработки всех событий, сигнальных слотов, таймеров и большинства функций Qt, которые требуют некоторого вида асинхронизма или обработки событий (GUI, OS, ...).

Он создается и запускает цикл событий основного потока. Создайте его в своей главной и используйте qApp->exec(), чтобы запустить его. Вызов блокируется до выхода из приложения.

Выбор правильного Q * Приложение

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

  • Безголовое применение: QCoreApplication
  • Графическое приложение на основе Qt Quick: QGuiApplication
  • Графическое приложение на основе Qt Widgets: QApplication

Обычно вы сначала создаете приложение Q *, инициализируете «статическую» часть приложения по мере необходимости, а затем вызываете qApp->exec() для запуска основного цикла обработки событий. Эта функция будет блокироваться до тех пор, пока ваше приложение не закроется.

int main(int argc, char *argv[]) {
    // Q[Core|Gui|)Application
    QCoreApplication app(argc, argv);

    // Load critical settings i.e. minimal config files, GUI, etc.
    // Remember no events, timers, and signals slots will work at that stage
    QSettings settings(...);

    // Start the QApplication
    // Will return once the application closes (forced, or by user)
    return app.exec();
}

В вашем приложении должен существовать только один Q*Application. Вы можете управлять им либо с помощью локальной переменной, либо с помощью глобального указателя qApp.

Подробные сведения

Для копирования документации QApplication класс:

Основные сферы ответственности QApplication:

  • Инициализирует приложение с настройками рабочего стола пользователя, такими как palette (), font () и doubleClickInterval (). Он отслеживает эти свойства в случае, если пользователь меняет рабочий стол глобально, например, через какую-то панель управления.
  • Он выполняет обработку событий, что означает, что он получает события из базовой оконной системы и отправляет их соответствующим виджетам. С помощью sendEvent () и postEvent () вы можете отправлять собственные события в виджеты.
  • Он анализирует общие аргументы командной строки и соответственно устанавливает свое внутреннее состояние. Смотрите подробности в документации конструктора ниже.
  • Определяет внешний вид приложения, который инкапсулируется в объекте QStyle. Это можно изменить во время выполнения с помощью setStyle ().
  • Указывает, как приложение должно распределять цвета. Подробности смотрите в setColorSpec ().
  • Обеспечивает локализацию строк, которые видны пользователю через translate ().
  • Предоставляет некоторые магические объекты, такие как рабочий стол () и буфер обмена ().
  • Он знает об окнах приложения. Вы можете узнать, какой виджет находится в определенной позиции, используя widgetAt (), получить список topLevelWidgets () и closeAllWindows () и т. Д.
  • Управляет обработкой курсора мыши в приложении, см. SetOverrideCursor ()

Одним из методов, которые вы можете переопределить, является QApplication::event, который дает вам полный контроль над тем, как все события обрабатываются в вашем приложении. Это может быть сделано либо путем наследования от него, либо с использованием метода installEventFilter.

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