Впервые столкнулся с такой проблемой. У меня ubuntu, ничего не получается! написано «Отсутствует подходящий комплект. Добавьте комплект в настройках или через инструмент обслуживания SDK.» вот нажимаю на настройки там ничего не выбирается!
Захожу в Qt Creator, нажимаю создать новый проект, выбираю Non-Qt > Plain C++ > Выбрать, Project lacation далее, Build system далее, В Kits у меня ничего нет и там пишет то что я писал выше! а без этого я не могу продолжить.
-
Вопрос задан
-
33165 просмотров
Пригласить эксперта
Столкнулся сейчас с данной проблемой, но только под Windows. Изначально я установил только Qt Creator. Но Qt Creator — это только IDE. Можно не устанавливать Qt Creator отдельно, а сразу запустить большой инсталлятор всех компонентов Qt и уже через него установить все необходимые компоненты, в том числе и Qt Creator.
Т.к. у меня уже установлена Visual Studio 2013, то вместо Qt/Qt 5.10.1/MinGW 5.3.0 32 bit и Qt/Tools/MinGW 5.3.0 я сначала попробовал установить Qt/Qt 5.10.1/MSVC 2013 64-bit. Такой вариант тоже работает, но в появившемся комплекте отсутствовал отладчик. Поэтому я остановил свой выбор на MinGW, т.к. в нём есть отладчик GDB.
а gcc если поставить? Должно помочь вроде
Qt тут при чем? Программист должен уметь собрать хотя бы hello world из консоли, а у вас и он не соберется, скорее всего.
sudo apt-get install build-essential
-
Показать ещё
Загружается…
Минуточку внимания
В данной статье я опишу как сделать отдельный комплект со статической линковкой библиотек Qt5. Если другими словами, мы сможем собирать проект в один исполняемый файл без Qt *.dll.
Подготовка
Нам понадобится непосредственно сам Qt, с официального сайта Qt 5.x.x for Windows 32-bit (MinGW).
Во время установки поставьте галочку на «Source Components», т.к. исходники будут нам необходимы для сборки.
В своем примере я буду использовать Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2).
Начнем
Сборка комплекта
- Создаем резервную копию qmake.conf, он находится в «Qt5.5.0\5.5\mingw492_32\mkspecs\win32-g++»
- Делаем изменения в qmake.conf
QMAKE_LFLAGS += -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc DEFINES += QT_STATIC_BUILD - Создаем резервную копию исходников Qt, они находятся в «Qt5.5.0\5.5\Src»
- Теперь запускаем терминал Qt — Qt 5.5 for Desktop (MinGW 4.9.2 32 bit), он находится
в «Все программы -> Qt5.5.0 -> 5.5 -> MinGW 4.9.2 (32-bit)» или же полным путем «%appdata%\Microsoft\Windows\Start Menu\Programs\Qt 5.5.0\5.5\MinGW 4.9.2 (32-bit)» - Переходим в директорию с исходниками Qt, вводим команду
cd X:\Qt\Qt5.5.0\5.5\Src\ - Конфигурируем этап установки, вводя команду, где путь после -prefix, местоположение комплекта сборки
configure -static -platform win32-g++ -prefix "X:\Qt\Qt5.5.0_Static" -release -opensource -confirm-license -nomake examples -nomake tests -nomake tools -opengl desktop -no-angle -qt-sql-sqlite -make libs -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype - По завершению конфигурирования, начинаем компиляцию исходников Qt, командой
mingw32-makeПосле компиляции, будет несколько ошибок, не обращаем на них внимание, они никак не скажутся на нашей сборке.
- Копируем файлы в указанный нами каталог на этапе конфигурирования, командой
mingw32-make installПосле копирования, так же будет несколько ошибок, не обращаем на них внимание.
- Теперь восстанавливаем резервные копии исходников Qt и qmake.conf
Добавляем статичный комплект в Qt Creator
- Запускаем Qt Creator
- Открываем «Инструменты -> Параметры..»
- Далее переходим «Сборка и запуск -> Qt Versions»
- Жмем добавить и выбираем qmake.exe, точнее «X:\Qt\Qt5.5.0_Static\bin\qmake.exe»
- Переходим во вкладку «Комплекты»
- Жмем добавить
- Пишем название нашего комплекта «Qt 5.5.0 Static MinGW 32», в профиле Qt указываем наш статичный профиль, который добавили в Qt Versions, так же указываем версию нашего компилятора и отладчика(MinGW)
- Все, мы добавили статичный комплект в Qt Creator
Примечание: в статический комплект не будут включены библиотеки gcc, что бы они так же собирались в исполняемый файл, надо прописать в .pro/.pri
QMAKE_LFLAGS_RELEASE += -static -static-libgcc
Руководствовался информацией с англ. инструкции wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW
Спасибо за внимание!
Последнее обновление: 06.12.2023
Среда разработки Qt Creator не является неотъемлимым компонентом для разработки приложений с помощью фреймворка Qt, тем не менее он упрощает многие вещи, прежде всего конфигурацию и настройку
построения приложения. Кроме того, Qt Creator предоставляет унифицированный интерфейс для основных операционных систем. И в дальнейшем я буду ориентироваться прежде всего на Qrt Creator.
Создадим первый проект. Для этого откроем Qt Creator и на стартовом экране выберем Create Project…, либо перейдем к пункту меню :
И нам откроется окно выбора типа проекта:
Выберем здесь тип шаблона Qt Widgets Application. Данный шаблон предоставляет базовый функционал для создания графического приложения.
На следующем шаге надо указать имя проекта и его расположение. Пусть проект будет называться HelloApp:
Далее надо выбрать систему сборки. В данном случае у нас есть выбор между qmake, CMake и Qbs. У каждого из них есть свои особенности, но в данном случае не принципиально, какую именно использовать.
Поэтому возьмем первую из них qmake, которая представляет собственную систему сборки Qt.
На следующем шаге нам отобразится окно с настройкой создаваемых файлов.
Оставим все эти настройки по умолчанию. Но для общего понимания вкратце пробежимся по ним:
-
Class name: имя создаваемого класса приложения
-
Base class: базовый класс, от которого будет наследоваться класс приложения. По умолчанию у нас есть выбор из
QMainWindow,QWidgetи
QDialog. Если надо, чтобы было полноценное окно приложения с меню, панелями статуса, инструментов, то выбирается QMainWindow. -
Header file: заголовочный файл для описания функция класса
-
Source file: файл с реализацией функционала класса
-
Generate form: указывает, будет ли генерироваться файл формы
-
Form file: имя файла формы, который будет генерироваться
При желании эти опции можно поизменять, но для первого приложения оставим все эти опции по умолчанию.
Qt Creator поставляется с инструментом Qt Linguist, который позволяет переводить приложение на разные языки. И на следующем шаге предлагается указать язык приложения.
На данный момент для нас это не актуально, поэтому ничего не будем вводить и пропустим этот шаг
На следующем шаге будет предложено выбрать комплект инструментов (kit) для сборки и запуска проекта.
И в данном случае необходимо выбрать хотя бы один комплект. Например, в данном случае мы будет создавать настольное графическое приложение. Поэтому выберем пункт, название которого начинается с «Desktop».
Например, для создания графического приложения под Windows я выбираю пункт Desktop (x86-windows-msvc2022-pe-64bit)
В зависимости от операционной системы набор комплектов может отличаться. Обычно комплекты определяются автоматически.
Однако может быть ситуация, когда в списке указаны комплекты, но они не активны, не доступны для выбора и отображаются серым цветом. В этом случае, возможно,
имеются проблемы с настройкой комплекта, как например, в следующем случае:
В этом случае надо установить связь между нужным комплектом и установленной версией Qt. Как это сделать расказывается далее.
После выбора комплекта на финальном окне можно будет указать настройки контроля версий:
Оставим все поля по умолчанию и нажмем на кнопку «Finish» для создания проекта.
Установка связи между Qt и Qt Creator
Как правило, Qt Creator может автоматически подхватить установленный Qt, а также ряд дополнительных
инструментов типа CMake, компиляторов для C/C++ и других. Однако если Qt Creator устанавливается отдельно от Qt (вручную или с помощью пакетного менеджера), то может потребоваться вручную установить связь между комплектом и версией Qt. Для этого в
Qt Creator перейдем к пункту меню Tools -> External — > Configure… (или к пункту Edit-> Preferences):
В открывшемся окне настроек перейдем к вкладке Qt Versions. Тут должны быть указаны используемые версии Qt. Однако если
среда разработки не может автоматически подхватить фреймворк, то в окне может быть пусто:
Если здесь пусто, нажмем на кнопку «Add» и в открывшемся окне укажем путь к утилите qmake6 (qmake6.exe на windows).
Например, в моем случае это путь «C:\Qt\6.6.1\msvc2019_64\bin». И затем нажмем на кнопку «Apply». Выше приведен пример с Windows, но те же самое характерно и для Linux/MacOS, только конкретные пути к
qmake будут отличаться.
Далее на вкладке Kits находим выбираем нужный комплект и через поле Qt Version устанавливаем для него версию ферймворка Qt
Структура проекта
Итак, в результате Qt Creator создает проект следующего вида :
Слева отобразится дерево проекта, а справа будет открыт файл main.cpp. По умолчанию стартовый проект состоит из следующих файлов:
-
HelloApp.pro: файл конфигурации проекта
-
mainwindow.h: заголовочный файл с описанием класса MainWindow, который представляет графическое окно
-
mainwindow.cpp: непосредственно сам функционал класса MainWindow
-
main.cpp: файл с функцией main, в которой и происходит запуск приложения Qt и его окна в виде объекта класса MainWindow
-
mainwindow.ui: xml-файл, который описывает интерфейс окна
Запуск проекта
Проект по умолчанию уже можно запустить. Для запуска проекта нажмем в Qt Creator в левом нижнем углу на зеленую стрелочку.
Стоит отметить, что при компиляции мы можем проверить вывод окна «Compile Output» — здесь могут отображать различная важная информация, например, информация о возникших ошибках:
И при запуске проекта нам отобразится пустое окно приложения:
- 1. Работа с windeployqt
- 2. Возможные ошибки
- 3. Файлы, которые могут быть не собраны windeployqt
- 4. Если проект с использованием QML
- 5. Видеоурок
В
одном из уроков по Qt
уже было показано, как собрать все
DLL
, применяемые в проекте для подготовки программы к использованию на других ПК, работающих под управлением
ОС Windows
, а теперь предлагаю ознакомиться с утилитой, которая поставляется вместе с
Qt
. Данная утилита называется
windeployqt
и является консольным приложением, которое, как правило, идёт в поставке с компиляторами
MinGW
или
MSVC.
Для использования
windeployqt
необходимо запустить из консоли, передав в качестве аргумента путь к скомпилированному исполняемому файлу приложения. После чего
windeployqt
соберёт все необходимые библиотеки в папке, где располагается исполняемый файл.
Утилита
windeployqt
располагается в папке
bin
, которая в свою очередь располагается в папке компилятора для Qt. Таким образом, путь к папке может быть следующим:
- для MinGW — C:\QT\5.5\mingw492_32\bin\windeployqt.exe
- для MSVC — C:\QT\5.5\msvc2013\bin\windeployqt.exe
Работа с windeployqt
А теперь приступим к работе с
windeployqt
. Допустим, у Вас уже имеется скомпилированный исполняемый файл и требуется собрать все необходимые для его работы DLL. Для этого сделаем небольшую подготовку и перекинем исполняемый файл в подготовленную для сбора папку. Я использую для демонстрации проект
EColor
, который написан с использованием
MinGW.
Исполняемый файл проекта будет размещён по следующему пути
D:\EColor\EColor.exe.
После чего необходимо будет открыть консоль (
cmd
), и перейти в консоле в папку с
windeployqt.
Далее запускаем утилиту передав ей путь расположения исполняемого файла, как показано на нижеследующем рисунке.
После чего утилита соберёт все необходимые для работы исполняемого файла DLL-ки. А выглядеть это будет следующим образом.
Возможные ошибки
Также стоит отметить, что не всё может пройти достаточно гладко. Например,
windeployqt,
может не найти библиотеки компилятора gcc и выдать следующую ошибку:
Cannot find GCC installation directory. g++.exe must be in the system path.Это лечится прописыванием в переменных среды пути к папке bin, которая содержит GCC и соответствующие библиотеки.
Для этого идём по следующему направлению (пример для
ОС Windows 7
):
Панель Управления / Система / Дополнительные параметры системы / Переменные среды
После чего добавим переменную PATH в системные переменные, где будут прописаны пути к GCC и его библиотекам. В моём случае это выглядело так:
- Имя переменной: PATH
-
Значение переменной:
D:\AndroidQT\QT\5.5\mingw492_32\bin;D:\AndroidQT\QT\Tools\mingw492_32\bin;%PATH%
После чего рекомендую перезагрузить ПК. После этого ошибка должна будет пропасть, а соответствующие библиотеки должны будут подтянуться в папку с исполняемым файлом.
Файлы, которые могут быть не собраны windeployqt
Также, некоторые файлы могут быть не собраны с помощью
windeployqt
, что стоит также учесть и протестировать приложение на другом ПК перед выпуском.
К примеру при сборке
DLL
для
EColor, windeployqt
всё-таки пропустила следующие файлы:
- LIBEAY32.dll
- MSVCP90.dll
- MSVCR90.dll
- MSVCR120.dll
- ssleay32.dll
Если проект с использованием QML
UPD 19.11.2018 by
alex_lip
:
Если в проекте используется QML, то необходимо добавить специальную директиву —qmldir
Данная директива должна будет указать откуда брать исходники QML
windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exeВидеоурок
Фреймверк Qt, хоть и является Open Source проектом, но активно пытается огораживать пользователей и разработчиков от свободного использования этого ПО. Менеджеры Qt постоянно придумывают различные меры, которые формально не противоречат лицензии GPL, но мешают свободно и просто устанавливать необходимые инструменты экосистемы Qt.
Одной из таких мер является Qt-аккаунт. Он бесплатен, и никаких ограничений на регистрацию в нем (пока) нет. Зачем он нужен? Ну, с некоторых пор в процедуре установки Qt-фреймверка из официального инсталлятора в обязательном порядке требуется ввод логина/пароля от Qt-аккаунта. Если Qt-аккаунта нет, установить фреймверк Qt из официального полного инсталлятора не получится. То есть, пользователь выкачивает инсталлятор размером ~4GB, в котором есть все файлы для инсталляции, но без Qt-аккаунта развернуть файлы фреймверка не может.
Однако, обойти данное ограничение все-таки можно, просто нужно знать как.
Установка Qt без запроса логина/пароля
Оказывается, запрос логина/пароля при установке Qt происходит только в случае, если инсталлятор обнаруживает доступ в интернет и видит доступными сервера компании Qt. Действительно, если нет интернета, то как проверять правильность ввода логина/пароля? Никак. А очень часто приходится ставить Qt в местах, где интернета просто не предусмотрено. В инсталляторе Qt это предусмотрели, и сделали пропуск процедуры регистрации в случае отсутствия интернет-соединения, просто этот момент никак не поясняют и не афишируют.
Таким образом, в момент инсталляции можно просто потушить интернет-соединение, и установить Qt без Qt-аккаунта. Это можно делать вручную, а можно, при необходимости, автоматизировать. В моих скриптах Ansible под Linux это происходит так:
— name: Блокировка интернет-соединения, чтобы не запрашивался Qt-аккаунт в инсталляторе
shell: |
iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp —dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp —dport 22 -j ACCEPT
iptables -A OUTPUT -j DROP
… команды инсталляции Qt …
— name: Разблокирование интернет-соединения
shell: |
iptables -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
Видно, что в этих командах остается рабочим порт SSH, остальные соединения временно перекрываются. Что-то подобное можно сделать и в Windows, это отдельный разговор. Факт в том, что при отсутствии интернет-соединения, нет необходимости в наличии логина/пароля от Qt аккаунта.
Не хочется крутить iptables? Можно просто выдернуть сетевой кабель из компьютера, установить Qt, потом вставить кабель на место. В случае WiFi соединения можно просто на время потушить это соединение.
Установка фреймверка Qt через консоль
Графический инсталлятор Qt может так же работать и в консольном режиме. Таким образом в Linux можно установить Qt из официального инсталлятора даже при отсутствии графического окружения X11. Для инсталляции в консольном режиме используется опция инсталляции —script, в которой указывается файл скрипта в формате *.qs:
cd /home/user/work/install
./qt-opensource-linux-x64-5.9.6.run —platform minimal —script install.qs
В данном скрипте описываются действия, которые должны поисходить при появлении того или иного окна инсталлятора. Скрипт пишется на языке JavaScript. Окна инсталлятора создаются «виртуально» внутри движка инсталлятора, и это позволяет выполнять действия так, как будто их выполняет пользователь.
Инсталлятор фреймверка Qt сделан с помощью инструмента Qt Installer Framework, который предназначен для создания инсталляторов к ПО. Подробнее об этом инструменте можно прочитать здесь: https://doc.qt.io/qtinstallerframework/ifw-overview.html
А формат QS-скриптов подробно описан в следующей документации: https://doc.qt.io/qtinstallerframework/noninteractive.html
Для Qt версии 5.9.6 файл скрипта install.qs может выглядеть так:
function Controller() {
installer.autoRejectMessageBoxes();
installer.installationFinished.connect(function() {
gui.clickButton(buttons.NextButton);
})
}
Controller.prototype.WelcomePageCallback = function() {
// click delay here because the next button is initially disabled for ~1 second
gui.clickButton(buttons.NextButton, 3000);
}
Controller.prototype.CredentialsPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.IntroductionPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.TargetDirectoryPageCallback = function()
{
gui.currentPageWidget().TargetDirectoryLineEdit.setText(«/opt/qt_5_9_6»);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ComponentSelectionPageCallback = function() {
var widget = gui.currentPageWidget();
widget.selectAll();
// Можно выбирать компоненты отдельно
// widget.selectComponent(«qt.55.gcc_64»);
// widget.selectComponent(«qt.55.qtquickcontrols»);
// И можно отключать компоненты отдельно
// widget.deselectComponent(«qt.tools.qtcreator»);
// widget.deselectComponent(«qt.55.qt3d»);
// widget.deselectComponent(«qt.55.qtcanvas3d»);
// widget.deselectComponent(«qt.55.qtlocation»);
// widget.deselectComponent(«qt.55.qtquick1»);
// widget.deselectComponent(«qt.55.qtscript»);
// widget.deselectComponent(«qt.55.qtwebengine»);
// widget.deselectComponent(«qt.extras»);
// widget.deselectComponent(«qt.tools.doc»);
// widget.deselectComponent(«qt.tools.examples»);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.LicenseAgreementPageCallback = function() {
gui.currentPageWidget().AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.StartMenuDirectoryPageCallback = function() {
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ReadyForInstallationPageCallback = function()
{
gui.clickButton(buttons.NextButton);
}
Controller.prototype.FinishedPageCallback = function() {
var checkBoxForm = gui.currentPageWidget().LaunchQtCreatorCheckBoxForm;
if (checkBoxForm && checkBoxForm.launchQtCreatorCheckBox) {
checkBoxForm.launchQtCreatorCheckBox.checked = false;
}
gui.clickButton(buttons.FinishButton);
}
Опция —platform задает плагин, который используется при инсталляции. Для консольной инсталляции указывается плагин minimal.
Более подробно об опциях инсталлятора в консольном режиме (Command Line Interface) написано здесь: https://doc.qt.io/qtinstallerframework/ifw-cli.html
* * *
Хинт! Ссылки на прямое скачивание инсталлятора Qt для различных версий фреймверка и различный аппаратные платформы можно найти в статье:
Прямые ссылки на оффлайн-инсталлятор Qt версий 5.12.x
Данные ссылки активны на январь 2021 года.
