Консольное приложение qt как завершить
Обновлено: 06.07.2024
На этом уроке мы познакомимся с кроссплатформенным фреймворком Qt и установим IDE для работы с ним.
Введение в Qt
Qt является кроссплатформенным (не зависящим от платформы/ОС) фреймворком для разработки приложений на языке С++. С помощью Qt были разработаны такие известные приложения, как: KDE, Opera, Google Earth и Skype. Впервые Qt был опубликован в мае 1995 года.
Qt5 подразумевает двойное лицензирование, а это означает, что Qt может быть использован в некоммерческих целях для создания приложений с открытым исходным кодом, а также как лицензия для коммерческих клиентов. За счет использования собственного фреймворка и мощного инструментария Qt позволяет быстро и удобно создавать собственные кроссплатформенные приложения. Кроме того, команды разработчиков получают возможность работать на разных платформах, используя при этом общие инструменты для разработки и отладки. Весь инструментарий Qt с открытым исходным кодом вы можете найти на сайте qt.io.
Изначально Qt был разработан норвежской компанией по разработке программного обеспечения Trolltech. В 2008 году компанию приобрела Nokia. Спустя четыре года в августе 2012 программные технологии Qt выкупила финская компания-разработчик Digia. Сейчас Qt развивается компанией QT Company, которая является дочерней компанией Digia, и как проект Qt под открытым исходным кодом с участием отдельных разработчиков и фирм.
Установка Qt Creator в Linux
Шаг №1: Мы будем устанавливать IDE с открытым исходным кодом. Для этого переходим по ссылке и выбираем самую свежую версию (на момент написания данной статьи — это Qt 5.13):
После окончания загрузки переходим в папку с необходимым нам файлом, нажимаем на него правой кнопкой мыши и выбираем "Свойства" . На вкладке "Основные" видим "Имя" , "Тип" , "Размер файла" , а также наименование родительской папки:
Переходим на вкладку "Права" и ставим галочку возле пункта "Разрешить выполнение файла как программы" :
Закрываем "Свойства" и запускаем программу.
Шаг №2: На следующем этапе установщик сообщает, что нам предоставлена версия с открытым исходным кодом Qt 5.13.0. Дальнейшая установка Qt предполагает регистрацию в Qt и создание Qt Account, который предоставляет доступ ко всем возможностям Qt. Кроме того, данное действие необходимо для проверки лицензии (коммерческая/некоммерческая). Если у вас уже есть учетная запись в Qt Account, то используйте кнопку "Next" .
Если учетной записи в Qt Account у вас еще нет, то её можно создать сейчас: для этого перейдите по соответствующей ссылке в установщике, и вы будете перенаправлены на сайт qt.io в соответствующий раздел, или просто используйте кнопку "Next" — вы сможете это сделать на следующем шаге:
Шаг №3: Здесь необходимо ввести логин и пароль от Qt Account или создать Qt Account, если его у вас еще нет. Кнопка "Next" переводит нас на следующий этап:
Шаг №4: Выбираем каталог для установки Qt 5.13.0. Обратите внимание, адрес каталога указывается латинскими буквами (без кириллицы) и без пробелов! После того, как выбрали каталог, нажимаем "Далее >" :
Шаг №5: Выбираем компоненты, которые хотим установить. Если на данном этапе у вас нет уверенности в выборе конкретных компонентов, то добавление и удаление можно будет сделать позже, после установки программы:
Шаг №6: Принимаем лицензионное соглашение:
И нажимаем на кнопку "Установить" :
Для завершения установки нажимаем "Завершить" . После завершения установки Qt Creator запустится самостоятельно (для этого необходимо поставить галочку возле пункта "Launch Qt Creator" ):
Вот примерно следующее вы должны увидеть при запуске Qt Creator:
Поздравляем! Qt Creator установлен.
Установка Qt Creator через командную строку в Linux
Еще одним альтернативным и простым способом установки Qt Creator в Linux на основе Debian является установка из пакетов. Если при работе с Linux вы используете терминал, то перед скачиванием и установкой Qt Creator программа запросит пароль пользователя root (команда sudo без дополнительных опций). Только после этого начнется скачивание и извлечение файлов. Обычно, пакеты Linux не содержат последней версии Qt и их необходимо обновить. Ниже приведен алгоритм действий, позволяющий за 4 шага установить Qt Creator через терминал в Linux.
Шаг №1: Обновление набора утилит для установки, удаления, обновления, поиска пакетов в Linux.
$ sudo apt update
Шаг №2: Скачивание и установка Qt.
$ sudo apt install qt5-default
Шаг №3: Установка Qt Creator.
$ sudo apt install qtcreator
Шаг №4: Установка тестовых программ.
$ sudo apt install qtbase5-examples qtdeclarative5-examples
Установка Qt Creator в Windows
Сначала нам нужно скачать установочный пакет Qt. Вы можете это сделать, обратившись к оф. сайту qt.io. Либо же воспользоваться альтернативным вариантом и скачать с какого-нибудь «зеркала» (например, c этого, полный список всех «зеркал» находится здесь):
Нажимаем на official_releases/ и переходим к online_installers/ :
Нажимаем на online_installers/ и скачиваем файл qt-unified-windows-x86-online.exe :
Запустив скачанный файл, видим перед собой приветствие «Qt Online Installer». Нажимаем "Next" :
Далее у нас спросят о наличии Qt Account. Можно смело нажимать "Skip" и двигаться дальше:
Затем снова "Далее" :
Теперь нам нужно указать путь установки Qt. Для простоты я выбрал C:\Qt :
На следующем шаге нам нужно выбрать набор компиляторов, которыми мы будем пользоваться на данных уроках. Я предлагаю ограничиться выбором пакета MinGW 7.3.0 32-bit , а остальные метки поставить так, как указано на скриншоте ниже:
После того, как инсталлятор скачает и установит все необходимые компоненты, можно будет перейти к непосредственному написанию кода для нашего приложения.
Создание проекта
Вначале нам необходимо создать проект. Сразу скажу, что наша программа будет консольным приложением. Для этого выберите "Файл" > "Создать файл или проект…" или можно воспользоваться сочетанием клавиш Ctrl+N :
Перед вами появится «Мастер настройки проектов». В левой колонке отметьте пункт "Приложение" , а затем в правой — "Консольное приложение Qt" :
На следующем шаге нужно будет указать имя для нашей будущей программы и папку, где будут располагаться файлы проекта. У меня это My_QtApplication и C:\dev\Qt_Project соответственно:
На следующем шаге без изменений, поэтому просто нажимаем кнопку "Далее" :
Теперь нам нужно выбрать набор компиляторов, который мы будем использовать для сборки нашего проекта. Я настоятельно рекомендую выбрать Desktop Qt 5.13.0 MinGW 32-bit (сняв при этом отметки с остальных, если они у вас есть):
На последнем шаге нажимаем "Завершить" :
Теперь вы можете увидеть автоматически сгенерированный Qt-проект консольного приложения. Давайте рассмотрим его детально:
Есть консольное приложение на Qt, которое запускает несколько потоков. Фактически в main я создаю классы потоков. Вопрос, где и как мне запустить деструкторы этих классов, когда я закрою окно консоли? Не могу сообразить.
Пробовал так в main:
Корректное завершение
Когда закрываю окно QGraphicsView`а, процесс остается еще запущен и пишет еще что возникла ошибка.
Корректное завершение QCoreApplication
Добрый день! OC: Windows 7 Professional Qt: 5.7.0 Есть приложение QCoreApplication: int.
Создание консольного приложения в Qt
добрый вечер ув. форумчане. собственно вот вопрос, почему окно терминала пустое после запуска.
Ошибка консольного приложения
Что это? Скриншот в вложении.
потом где-нибудь пошлете сигнал, удалите класс через делет и словите неожиданности
это бесконечный цикл, пока внутри него есть хотя ба один QObject. То есть выйти из него и удалить классы - никак, без изврата
у потока есть сигнал завершении работы, его и нужно ловить, пирмерно так
Drus, Попробовал так. окно закрывается, а сигнала finished() нет.
Наличие потока проверил, запускается нормально. странно.
Добавлено через 9 минут
Drus, Заметил еще такую вещь. У меня в одном из потоков в run() есть бесконечный цикл. Если цикл убрать то finished вызывается после окончания run, а если окно закрыть то нифига.
Можно как то еще отловить закрытие окна консольного приложения или просто его завершение?
Добавлено через 29 минут
Нашел вроде бы вариант, связать в main:
Может кто знает как с глобальной функцией например связать?
Простите что так долго не отвечал.
касательно вопроса вашего - я не подскажу так навскидку. слотосвязывание производите до того как в run отправляете? это важно.
Репутация: 48
Всего: 135
Есть простенькое консольное приложение на Qt.
Подскажите, как правильно выйти из такого приложения ? Если в Windows нажать Ctrl+C или Ctrl+Break, то программа закрывается, но деструктор
Some() не вызывается. Как вообще в таком приложении отслеживать нажатия клавиш ? Допустим, я хочу, чтобы программа нормально завершалась по Esc
Желательно кроссплатформенное решение. Если же решение только системозависимое, то подскажите, пожалуйста, как это сделать в Windows и в Linux.
Спасибо.
Репутация: 24
Всего: 196
Репутация: 48
Всего: 135
С Ctrl+C справился. POSIX-сигналы, оказывается, в венде прекрасно работают
В Linux не проверял, но, думаю, там всё будет работать.
Сейчас поищу как обрабатывать клавиши
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
Репутация: 24
Всего: 196
Репутация: 48
Всего: 135
Репутация: 24
Всего: 196
Используй sig_atomic_t в качестве флага. А из программы его периодически проверяй.
Репутация: 48
Всего: 135
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.
[ Время генерации скрипта: 0.1115 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Может быть я просто туплю, но всё же.
В конструкторе главного окна пишу первой строчкой:
Ноль реакции. Почему не завершается работа приложения ? Появляется главное окно программы.
Как завершить работу приложения ?
QT 4, студия 2008.
ты походу в начале вызываешь qApp->exit(), а уже потом exec( ) в функции маин. Если нет, то давай более подробно код.Я, конечно, теперь всё это понимаю и могу просто до вызова a.exec() в функции main() сделать
Так что тут только кривизна разработчиков QT. И только. Если экземпляр класса создан, то все его функции должны работать нормально вне зависимости от обстоятельств и доп. условий.
Добавлено 14.03.09, 11:22
доп. пример к логике моих рассуждений:
Вот ты сел в автомобиль, закрыл дверь, и тут вспомнил, что забыл что-то и хочешь выйти. А на попытку выйти тебе бортовой компьютер отвечает: "Извините, машина не заведена, Вы не можете выйти из машины". Тебе такая логика понравится ?
Вот ты сел в автомобиль, закрыл дверь, и тут вспомнил, что забыл что-то и хочешь выйти. А на попытку выйти тебе бортовой компьютер отвечает: "Извините, машина не заведена, Вы не можете выйти из машины". Тебе такая логика понравится ?Если хочешь сделать feature request, тебе сюда.
Но вообще, я себе не представляю, как в C++ можно реализовать подобное(выход из программы в обход main()). Либо ты юзаешь std::exit(), но тогда забудь о RAII, либо кидай исключение, но тогда тоже мало что хорошего выйдет, если его в main() не поймать. Как ты себе такое представляешь?
Абсолютно не согласен.
Если у меня есть непосредственный доступ к купленному автомобилю, то я могу делать с ним что угодно, например - сжечь.
Если у меня есть непосредственный доступ к экземпляру класса QApplication, то он должен корректно выполнять ВСЕ предоставляемые функции, в том числе и функцию "сдохнуть".
Если у меня есть непосредственный доступ к купленному автомобилю, то я могу делать с ним что угодно, например - сжечь.
Если у меня есть непосредственный доступ к экземпляру класса QApplication, то он должен корректно выполнять ВСЕ предоставляемые функции, в том числе и функцию "сдохнуть".
Читайте также: