Qt выполнение консольных команд linux

Обновлено: 04.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-проект консольного приложения. Давайте рассмотрим его детально:

Я хочу перезагрузить компьютер, выполнив команду в linux с помощью QProcess . У меня есть жестко закодированный пароль root в моем приложении.

когда я запускаю следующее в терминале, он работает идеально:

когда я помещаю команду в сценарий оболочки и вызываю ее через QProcess Это также успешно:

но я не могу запустить его непосредственно переходя к QProcess :

он будет просто печатать myPass | sudo -S shutdown -r now

как можно запускать такие относительно сложные команды напрямую, используя QProcess . (Не помещая сценарий оболочки).

ключевые методы, которые существуют для этой цели создано в QProcess :

таким образом, следующий фрагмент кода будет равноценность command1 | command2 не ограничиваясь одним интерпретатором или другой:

вы могли бы бросить sudo -S часть, потому что вы можете запустить эту небольшую программу как root, а также настроить права. Вы даже можете установить setuid или setcap для программы выключения.

что мы обычно делаем при создании коммерческих систем Linux, чтобы иметь минимальное приложение, которое может получить setuid или setcap для деятельности, которую он пытается сделать, а затем мы вызываем это явно с system(3) или QProcess на Linux. В основном,

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

во-первых, вы можете настроить sudo не запрашивать пароль. Например, будучи членом sudo группа и наличие строки

в своем . Конечно, не спрашивать пароль снижает безопасность вашей системы.

чтобы ответить на ваш вопрос о Qt, помните, что Баш(1), как все в POSIX снарядов, поэтому /bin/sh , признать -c аргумент со строкой (на самом деле

вы должны поставить свою команду в shell-скрипт и выполнить sh или bash С QProcess с вашим сценарием оболочки в качестве аргумента, потому что ваша команда содержит | , который должны интерпретируется sh или bash .

однако, это только мое мнение, но: я не думаю, что это хорошее решение, чтобы делать то, что вы делаете, т. е. включать пароль root в исполняемый файл.

Ubuntu 10.04, QtCreator 32 bit Делаю консольное приложение, ставлю галочку Проект> Настройки запуска-> подробнее-> Запускать в терминале Терминал запускаеться, но программа не выполняеться, в чем проблема?


губит людей не пиво, губит людей Qt

а как ты определил, что программа не выполняется? может она просто ничего не делает?

>Консольное приложение в QT


Отучает от велосипедостроительства. Qt != GUI.

Всё, что есть в qt кроме гуя - велосипеды.


А если приложение ориентировано не только под Linux?

Писать кроссплатформенно можно и без кутей, ваш К.О.


Честно, я теряюсь как обойтись при необходимости писать кроссплатформенно без Qt, когда речь заходит о поддержке сети и различных БД, и необходимостью преобразования изображений (размеры, формат, фильтры). Это то, с чем лично мне приходилось сталкиваться.

писать кроссплатформенное, используя готовые велосипеды, быстрее, чем велосипедить самому. ваш К.О.

Народ, тут не стоит вопрос что лучше и за чем это надо) Просто помогите с проблемой)

от Proud_Pank 16.07.10 00:40:58


УМВР. Покажи полностью main.cpp и .pro.


надо добавить ещё return a.exec();

от Proud_Pank 16.07.10 00:40:58


>необходимостью преобразования изображений (размеры, формат, фильтры)

Для этого есть ImageMagick.



а где оно сейчас появляется?

Ему нужно в qt-creator.


Подозреваю, вы просто забыли добавить в pro-файл:

Которая в свою очередь отвечает за флаг линковки: /SYBSYSTEM:CONSOLE. В итоге программа выодняется, просто этого не видно в терминале.

В отличии от Линукса, где консоль перехватывает вывод в stdout, в Windows для этого нужен бубен на этапе сборки.

Забирай желчь и метан и отправляйся на винфак.


Использовать один большой, качественный, кроссплатформенный велосипед лучше и надежнее, чем кучу мелких.



именно из-за таких фанатиков как ты гном катится в УГ

Тоже, не чего в терминале не выводиться

Тоже самое будет, endl, тут не зачем

Странно, у меня работает. Тогда запускайте в отдельном терминале.


> Всё, что есть в qt кроме гуя - велосипеды.

В отличии от камы - на них ездить приятно

Я минимально изменил код тс, так что не пукай.


Мы говорим про кросс-платформенность. unix-way в современных реалиях (начичие таких ОС как Windows) тут не прокатывает.

попробуй без дизайнера сделать.

> Я минимально изменил код тс, так что не пукай.

Мимо, я не про тебя.

Ну так и смотри кому отвечаешь.

Предлагаешь пользователю поставить кроме своего велосипеда ещё добрый десяток библиотек вроде ImageMagick?

Появляеться и все. Не чего не происходит


А если запустить самостоятельно из cmd, предравительно скопировав в директорию с exe-файлом QtCore.dll? И да, покажите pro-файл и исходники, всяко быстрее подсказать будет.

У него уже Ubuntu 10.04, причем тут cmd, exe?

Как уже сказали, было бы неплохо, если бы ты скинул архив с исходниками, например, на rghost.


Честно, я теряюсь как обойтись при необходимости писать кроссплатформенно без Qt,

когда речь заходит о поддержке сети

да и опять же ручками всё просто пишется, если не надо ничего умного

и необходимостью преобразования изображений (размеры, формат, фильтры).

lib* (-jpeg, -png, etc) - тысячи их :)


Использовать один большой, качественный, кроссплатформенный велосипед лучше и надежнее, чем кучу мелких.

1 велосипед общего назначения будет работать хуже чем 10 узкоспециализированных

RedisConsole

Из-за того, что все возможности базы данных не реализуешь, да они и могут появляться каждый день новые, нужно было добавить в графический интерфейс консоль. На основе какого виджета в Qt ее имитировать, и как, и хочу вам рассказать.

От беспредела к тотальному контролю

Для базового виджета консоли я выбрал QPlainTextEdit. Во-первых, он включает в себя расширенные возможности редактирования текста, которые нам могут понадобиться, а во-вторых, он позволяет добавлять форматирование: подсветка разных элементов цветом нам бы не помешала.

Итак, создаем потомка QPlainTextEdit.

Несмотря на то, что QPlainTextEdit – это упрощенная версия QTextEdit, он разрешает пользователю делать черезчур большое количество действий, непозволительное для приличной консоли.

Поэтому первое, что мы сделаем, — это ограничим все, что только можно. Перейдем от полного беспредела к тотальному контролю.

Для этого переопределим встроенные слоты, получающие нажатия клавиш и клики мышки:

После этих строк пользователь не сможет ни ввести символ в поле виджета, ни выделить кусок текста, ни удалить строку – полная блокировка.

Этап либерализации

Теперь пойдем от тотального запрета к разумной демократии, попутно разрешая все, что понадобится.

Первое, что сделаем – это определим строку приглашения (prompt):

И выведем строку приглашения в консоль:

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

При вводе обычных букв, цифр и других полезных символов, они должны добавляться в строку команды:

Символы можно стирать клавишей Backspace, но не все, а только до определенного момента – чтобы строка приглашения не дай бог не затерлась:

Определим реакцию виджета на ввод команды (при нажатии клавиши Enter):

При вводе команды мы вырезаем кусок текста от строки приглашения до конца текстового блока и испускаем сигнал, к которому можно будет присоединить слот:

Так же на время обработки команды приложением, устанавливаем флажок блокировки текстового поля.

Приложение – родитель виджета обработает команду и передаст консоли результат выполнения, тем самым разблокируя ее:

История команд

Хотелось бы, чтобы история всех вводимых команд сохранялась и при нажатии клавиш вверх/вниз можно было бы по ней перемещаться:

Делаем красиво: раскраска консоли

Для этого в конструкторе виджета определим общую гамму цвета для консоли – фон черный, буквы вводимой команды – зеленые:

При выводе строки приглашения делаем шрифт зеленого цвета:

А при выводе результата выполнения команды делаем шрифт белого цвета:

Все вниз!

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

Результат

В результате получилась веселая, красивая и удобная консолька. У меня это заняло всего 120 строк кода. Конечно, есть еще много вещей, которые можно было бы сделать, но основная функциональность реализована.

Ссылки

Там можно посмотреть класс виджета Console и скачать скомпилированный бинарник приложения для Windows, нажав кнопку «Downloads».

Читайте также: