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
.