Qt как запустить консольное приложение
Есть два способа отобразить консоль в программе интерфейса Qt:
1. Программа отображает консоль при запуске.
2. При запуске программы отображается только интерфейс, а при последующем запуске отображается консоль.
Ниже показано, как отобразить два метода, соответственно, как настроить проект и соответствующий код.
1. Программа отображает консоль при запуске.
Отметьте «запустить в терминале» в интерфейсе конфигурации проекта QtCreator или «Проект -> Свойства -> Компоновщик -> Система» в VS
2. Консоль не отображается при запуске программы, а потом отображается по срабатыванию.
Программа не отображает консоль при запуске, нет необходимости проверять «запустить в терминале» в Qt или выбирать «окно» в конфигурации VS, просто добавьте код для открытия консоли в слоте триггера.
Интеллектуальная рекомендация
Замена персонажа
Пожалуйста, реализуйте функцию для преобразованияЗаменить каждый пробел"% 20". Например, когда строка We We Happy. Строка после замены - We% 20Are% 20Happy. Встроенные функции для строк Pyth.
Подсистема ввода Android - Itreader EventHub :: GetEvents Mneedtscandevices Переменные Подробный анализ
EventHub :: MeetEvents Method, Mneedtscandevices Переменная процесса вызова подробный анализ . if (mNeedToScanDevices.
Базовые знания Python3: List
Просто поймите: 1. Типы элементов в списке могут быть разными, он поддерживает числа, строки и даже списки (так называемая вложенность). 2. Список представляет собой список элементов, заключенн.
NOIP 2017 Улучшенное сокровище группы ___ государственное давление dp + dfs
Главная идея: ответ: Этот вопрос найти несложно, f [i] указывает, что состояние выбранной точки равно i, это минимальная стоимость, а dis [i] указывает количество сокровищ от начальной точки до i. , а.
HYSBZ-2002: Bounce Bouncing Sheep (алгоритм блокировки)
Отскок летающей овцы Однажды Лостмонки изобрел сверхэластичное устройство и, чтобы похвастаться перед своими друзьями-овцами, пригласил маленькую овечку поиграть в игру. В начале игры Lostmonkey разме.
При работе в Qt Creator вы находитесь в одном из режимов:
- Welcome (Начало) — отображает экран приветствия, позволяя быстро загружать недавние сессии или отдельные проекты. Этот режим можно увидеть при запуске Qt Creator без указания ключей командной строки.
- Edit (Редактор) — позволяет редактировать файлы проекта и исходных кодов. Боковая панель слева предоставляет различные виды для перемещения между файлами.
- Debug (Отладка) — предоставляет различные способы для просмотра состояния программы при отладке.
- Projects (Проекты) — используется для настройки сборки, запуска и редактирования кода.
- Analyze (Анализ) — в Qt интегрированы современные средства анализа кода разрабатываемого приложения.
- Help (Справка) — используется для вывода документации библиотеки Qt и Qt Creator .
- Output (Вывод) — используется для вывода подробных сведений о проекте.
Рассмотрим простейшие приёмы работы в среде Qt Creator на примере создания консольного приложения для решения задачи 1.1. Для этого можно поступить одним из способов:
- В меню File (Файл) выбрать команду New File or Project (Новый файл или проект) (комбинация клавиш Ctrl+N).
- Находясь в режиме Welcome (Начало) главного окна QtCreator (рис. 1.1) щёлкаем по ссылке Develop (Разработка) и выбираем команду Create Project (Создать проект).
После этого откроется окно, подобное представленному на рис. 1.2. Для создания простейшего консольного приложения выбираем Non-Qt Project (Проект без использования Qt ) — Plain C++ Project (Простой проект на языке С++ ).
Далее выбираем имя проекта и каталог для его размещения (см. рис. 1.3) 8 Рекомендуем для каждого проекта выбирать отдельный каталог. Проект — это несколько взаимосвязанных между собой файлов и каталогов. . Следующие два этапа создания нашего первого приложения оставляем без изменения 9 О назначении этих этапов будет рассказано в дальнейших разделах книги. . После чего окно IDE Qt Creator будет подобно представленному на рис. 1.4. Заменим текст "Hello, Word" стандартного приложения, на текст программы решения задачи 1.1.
увеличить изображение
Рис. 1.2. Окно выбора типа приложения в Qt Creator
Для сохранения текста программы можно воспользоваться командой Сохранить или Сохранить всё из меню Файл. Откомпилировать и запустить программу можно одним из следующих способов:
Окно с результатами работы программы представлено на рис. 1.5.
увеличить изображение
Рис. 1.4. Главное окно создания консольного приложения
Авторы сталкивались с тем, что в некоторых дистрибутивах Ubuntu Linux и Linux Mint после установки Qt Creator не запускались консольные приложения. Если читатель столкнулся с подобной проблемой, скорее всего надо корректно настроить терминал, который отвечает за запуск приложений в консоли. Для этого вызываем команду Tools — Options — Environment (см. рис. 1.6). Параметр Terminal (Терминал) должен быть таким же, как показано на рис. 1.6. Проверьте установлен ли в Вашей системе пакет xterm, и при необходимости доставьте его. После этого не должно быть проблем с запуском консольных приложений.
Аналогичным образом можно создавать и запускать любое консольное приложение.
Рис. 1.5. Результаты работы программы решения задачи 1.1
Дальнейшее знакомство со средой Qt Creator продолжим, решая следующую задачу.
Задача 1.2. Заданы длины трёх сторон треугольника и (см. рис. 1.7). Вычислить площадь и периметр треугольника.
Для решения задачи можно воспользоваться формулой Герона (\frac
-a)(\frac
-b)(\frac
-c)>" />
, где — периметр.
Решение задачи можно разбить на следующие этапы:
Ниже приведён текст программы. Сразу заметим, что в тексте могут встречаться строки, начинающие с двух наклонных (//). Это комментарии. Комментарии не являются обязательными элементами программы и ничего не сообщают компьютеру, они поясняют человеку, читающему текст программы, назначение отдельных элементов программы. В книге комментарии будут широко использоваться для пояснения отдельных участков программы.
Кроме используемой в предыдущей программе библиотеки iostream , в строке 2 подключим библиотеку math.h , которая служит для использования математических функций языка С(С++) . В данной программе используется функция извлечения квадратного корня — . Остальные операторы (ввода, вывода, вычисления значений переменных) аналогичны используемым в предыдущей программе.
Таким образом, выше были рассмотрены самые простые программы (линейной структуры), которые предназначены для ввода исходных данных, расчёта по формулам и вывода результатов.
Из-за того, что все возможности базы данных не реализуешь, да они и могут появляться каждый день новые, нужно было добавить в графический интерфейс консоль. На основе какого виджета в Qt ее имитировать, и как, и хочу вам рассказать.
От беспредела к тотальному контролю
Для базового виджета консоли я выбрал QPlainTextEdit. Во-первых, он включает в себя расширенные возможности редактирования текста, которые нам могут понадобиться, а во-вторых, он позволяет добавлять форматирование: подсветка разных элементов цветом нам бы не помешала.
Итак, создаем потомка QPlainTextEdit.
Несмотря на то, что QPlainTextEdit – это упрощенная версия QTextEdit, он разрешает пользователю делать черезчур большое количество действий, непозволительное для приличной консоли.
Поэтому первое, что мы сделаем, — это ограничим все, что только можно. Перейдем от полного беспредела к тотальному контролю.
Для этого переопределим встроенные слоты, получающие нажатия клавиш и клики мышки:
После этих строк пользователь не сможет ни ввести символ в поле виджета, ни выделить кусок текста, ни удалить строку – полная блокировка.
Этап либерализации
Теперь пойдем от тотального запрета к разумной демократии, попутно разрешая все, что понадобится.
Первое, что сделаем – это определим строку приглашения (prompt):
И выведем строку приглашения в консоль:
Нужно, чтобы при клике мышкой нельзя было переставить курсор, но можно было сделать консоль активной:
При вводе обычных букв, цифр и других полезных символов, они должны добавляться в строку команды:
Символы можно стирать клавишей Backspace, но не все, а только до определенного момента – чтобы строка приглашения не дай бог не затерлась:
Определим реакцию виджета на ввод команды (при нажатии клавиши Enter):
При вводе команды мы вырезаем кусок текста от строки приглашения до конца текстового блока и испускаем сигнал, к которому можно будет присоединить слот:
Так же на время обработки команды приложением, устанавливаем флажок блокировки текстового поля.
Приложение – родитель виджета обработает команду и передаст консоли результат выполнения, тем самым разблокируя ее:
История команд
Хотелось бы, чтобы история всех вводимых команд сохранялась и при нажатии клавиш вверх/вниз можно было бы по ней перемещаться:
Делаем красиво: раскраска консоли
Для этого в конструкторе виджета определим общую гамму цвета для консоли – фон черный, буквы вводимой команды – зеленые:
При выводе строки приглашения делаем шрифт зеленого цвета:
А при выводе результата выполнения команды делаем шрифт белого цвета:
Все вниз!
Также хотелось бы, чтобы когда пользователь вводит команду, скроллбар текстового поля консоли проматывался до самого низа:
Результат
В результате получилась веселая, красивая и удобная консолька. У меня это заняло всего 120 строк кода. Конечно, есть еще много вещей, которые можно было бы сделать, но основная функциональность реализована.
Ссылки
Там можно посмотреть класс виджета Console и скачать скомпилированный бинарник приложения для Windows, нажав кнопку «Downloads».
В статье рассказывается как запускать приложения, созданные в Qt без самого Qt Creator. Или же приложения должны запускаться на компах, где нет Qt.
Тут расскажу о самом механизме нахождения DLL, так как Qt активно развивается и регулярно новые версии выпускает, и под каждую версию писать статью о новом наборе DLL накладно.
В качестве среды для разработки используется Qt 5.2.0 for Windows 32-bit (MinGW 4.8). Для версий не с компилятором MinGW алгоритм решение проблемы может быть иным.
Проблема
При запуске приложения в самом Qt Creator (при нажатии на зеленую стрелку, или же через меню, или же иным способом) мы видим наше приложение:
Когда мы создавали приложение, то мы видели следующее окно:
Указанные тут папки и есть папки, куда сохраняется наше приложение.
Если мы перейдем в папку C:\Qt\build-Example-Desktop_Qt_5_2_0_MinGW_32bit-Debug (у вас папка может по-другому называться), то увидим следующее:
Зайдем в папку debug и найдем там наше приложение:
Если мы его запустим, то получим ошибку:
Первый способ — Официальная утилита windeployqt
Update 2018. Сейчас библиотека стала работать гораздо лучше. Поэтому ниже будет более подробная инструкция по использованию windeployqt .
Итак, в командной строке перейдите в папку bin того компилятора, под которым вы компилируете приложение в режиме Release . В этой папке должен быть файл windeployqt.exe . Например, у меня в данный момент для MinGW это папка D:\Qt\5.12.0\mingw73_64\bin , а для Visual Studio D:\Qt\5.12.0\msvc2017_64\bin .
Перейти можно с помощью команды cd :
Скомпилируйте в режиме Release ваше приложение. Для примера я создал простое Qt Widgets Application и скомпилировал под MinGW компилятором:
Найдите папку, в которой находится скомпилированный EXE файл. Например, в моем случае это папка D:\Harrix\Projects\Qt\untitled\_build\release :
Теперь можно в командной строке вызвать windeployqt с указанием папки с EXE файлом:
Теперь в папке добавились нужные файлы:
Но если попробовать запустить EXE файл, то вылетит ошибка, так как три DLL не скопировались: libwinpthread-1.dll , libstdc++-6.dll , libgcc_s_seh-1.dll . Их нужно вручную скопировать из той же папки, где находится windeployqt.exe :
После этого приложение должно запуститься. Настоятельно рекомендую проверить работоспособность приложения на чистом компьютере без установленной Qt.
Для компилятора Visual Studio алгоритм тот же, но лучше еще добавить параметр --compiler-runtime , например:
Если у вас приложение с использованием QML, то нужен параметр --qmldir с указанием папки, где хранятся .qml файлы:
Стоит обратить внимание на то, что windeployqt может копировать лишние файлы. От них можно избавиться, потихоньку удаляя файлы из папки на чистом компьютере.
Второй способ — Ручной
Начало решения проблемы
Мы же хотим, чтобы приложение запускалось на других компах? Поэтому надо в окончательном виде выдавать приложение, а не в режиме отладки.
Внизу, над зеленым треугольником выбираем режим Release :
Запускаем приложение, нажатием на зеленый треугольник:
Как видим, через некоторое время запустилось привычное нам приложение. Но теперь *.exe файл появился в папке, которое мы указывали для Release :
Заходим в эту папку (у меня это C:\Qt\build-Example-Desktop_Qt_5_2_0_MinGW_32bit-Release ):
Если в прошлый раз мы заходили в папку debug , то сейчас заходим в папку release , и запускаем приложение:
Кстати, для последующего распространения программы нам из папки нужен (из текущих файлов) только *.exe файл, поэтому файлы main.o , mainwindow.o , moc_mainwindow.cpp , moc_mainwindow.o можно удалить без ущерба (это служебные файлы, которые будут появляться при каждой компиляции).
Нахождение DLL и других файлов
Итак, приложение ругается на отсутствие Qt5Core.dll (у вас может быть цифра другая, если в момент чтения статьи вышла иная версия Qt). Где этот файл искать?
Найдите папку, в которую устанавливался Qt. У меня это папка C:\QtQt5.2.0
В ней найдите папку с номером версии вашего Qt. У меня это первая папка с названием 5.2.0-rc1 . У вас скорее всего будет немного по-другому называться (у меня сейчас beta версия стоит):
В ней будет папка компилятора MinGW:
Переходим в неё:
В ней находим главную папку bin :
И в этой папке находим нужные нам dll . Находим тут Qt5Core.dll (не Qt5Cored.dll . ) и копируем в папку C:\Qt\build-Example-Desktop_Qt_5_2_0_MinGW_32bit-Release\release (где наш *.exe файл находится). И запустим приложение:
И вот так копируем все нужные DLL, которые просит приложение. У меня потребовались следующие DLL: icudt51.dll , icuin51.dll , icuuc51.dll , libgcc_s_dw2-1.dll , libstdc++-6.dll , libwinpthread-1.dll , Qt5Core.dll , Qt5Gui.dll , Qt5Widgets.dll . И вот приложение запустилось:
Ура! Но рано радоваться. Если мы запустим на компе, где нет Qt, то приложение выдаст ошибку, так как не может найти библиотеки. Надо скопировать еще несколько файлов. Помните основную папку Qt? Переходим в неё:
Там есть папка Tools :
В ней есть папка QtCreator :
В ней папка bin :
Скопируйте файл qt.conf в папку с *.exe файлом:
Теперь перейдите в папку с компилятором:
А там перейдем в папку plugins , а оттуда в platforms :
Скопируйте файлы qminimal.dll и qwindows.dll . Но вставим не просто в папку с *.exe файлом, там создадим папку plugins , а там папку platforms , и уже в нее вставим файлы. То есть для всех DLL, которые нам могут пригодиться, некоторые находятся не прямо в папке bin , то для этих DLL в папке с EXE файлом мы должны создать такие же папки, в которых они находились, относительно папки компилятора. В нашем случае в папке с компилятором файлы находись под именами: [путь к папке с компилятором] \plugins \platforms \qminimal.dll , [путь к папке с компилятором] \plugins \platforms \qwindows.dll . Поэтому копируйте так: [путь к папке с *.exe файлом] \plugins \platforms \qminimal.dll , [путь к папке с *.exe файлом] \plugins \platforms \qwindows.dll .
Вот теперь приложение запустится везде! То есть вы должны вместе с EXE файлом копировать все эти DLL и qt.conf . На скриншоте временные файлы я не удалил:
Здесь показан принцип, как находить нужные DLL. Если вы используете какие то другие компоненты, например, QWebVie w, то вам будут нужны еще другие DLL, которые вы находите аналогичным способом.
Помните, что если вы используется QtQuick то вам еще потребуется папка qml .
Внимание! Иногда описанный выше способ не помогает. Вроде скопировали все DLL, что вам могли пригодиться, приложение даже запускается, но вы видите лишь белый экран, например, или приложение вообще не появляется, но в диспетчере задач появляется.
В таком случае копируйте все DLL из папки bin (а из остальных мест в виде папок, где они хранятся) и начинайте скрупулезно удалять поштучно DLL до тех пор, пока не сузите число файлов до минимально работающего числа. Помните, что все DLL есть в двух вариантах: для release и ли debug режима. Для debug режима в имени DLL появляется буква d . Эти файлы вам не нужны!
Статья обновлена 2018
В статье рассказывается как запускать приложения, созданные в Qt без самого Qt Creator. Или же приложения должны запускаться на компах, где нет Qt.
В статье рассказывается как запускать приложения, созданные в Qt без самого Qt Creator. Или же приложения должны запускаться на компах, где нет Qt.
Читайте также: