LINUX.ORG.RU

с/с++/qt4 формошлепство на linux для простого пользователя

 , , ,


0

2

добрый день

1. планы, описание задачи:

хочу разобраться и наработать методику/код «формошлЁп-скрИптинга» для простого пользователя :о)
- GUI-формы будут на QT4/Lazarus (в данном случае рассматриваем QT4)
в GUI-форме:
- вызовы скриптов, внешних команд и пр...
- получение выхлопа скрипта & ERRORLEVEL для дальнешего анализа

т.к. GUI будут на QT4, то запуск скрипта / чтение выхлопа / ERR_LEVEL, ск.всего, будет на базе QT4

2. настройки и рабочие скрипты

- ini-файл с настройками
- каталог со скриптами (либо стандартный PATH)

3. чтение ini-файла, запуск скриптов

- GUI-программа загружает в буфер содержимое ini-файла
- реакция на кнопку -> вызов обработчика, типа:

run_id(int ID);
- обработчик парсит буфер ini-файла, по ID получает имя_скрипта
- запуск скрипта, анализ выхлопа/кода возврата и ... дальнейшая реализация в зов-ти от фантазии :о)

КОД_1 - запуск внешнего скрипта
архив code_1.tar.xz

Примерный выхлоп основной программы:

### qDebug() 
 exitCode  () = ' 2 '
 exitStatus() = ' 0 '
 str_out      = ' "test script 2, arg=--add_scr2_arg --add_qt_app_arg
" '
 str_err      = ' "" '
 
### printf()
exitCode  () = '2'
exitStatus() = '0'
str_out   () = 'test script 2, arg=--add_scr2_arg --add_qt_app_arg
'
str_err   () = ''

ВОПРОСЫ

1. qDebug - имеет «обрамление» с обоих сторон строк в виде:

' "' + '" '
(т.е. пробел + символ ковычки)

ВОПРОС 1: это особенности отладочного вывода qDebug ?

в обоих случаях qDebug & printf при «выхлопе текста» запускаемого скрипта - «странная» печать строки, с переносом в конце, хотя сам выхлоп скрипта без переноса

str_out   () = 'test script 2, arg=--add_scr2_arg --add_qt_app_arg
' !!! <-- вот тут перенос конца строки

ВОПРОС 2 :почему?

прочие ВОПРОСЫ:
- может, для внутреннего использования, лучше/проще по старинке использоавть string, или вообще простой буфер char* str?

мне самому не оч. нравиться использовать qt-классы, для таких простых операций, но !!! логично писать в той «эко-системе» в которой пишешь GUI, мало-ли чего там еще в будущем шарахнет использовать, передать «какой особенный» параметр в QT4/GUI... имхо

уточнение:
- именно QT4
- согласен, для простых GUI на cli/YAD/Zenity, логично «это» делать на bash/perl итд, кому, что удобнее
- в инете есть много «простых» примеров с «кодом» на с/с++, но я не встречал что-бы было реализовано одновременно при запуске скрипта получение выхлопа и кодa-возврата.
- так-же не встречал подходящих/удобных/минимальных примеров/библиотек парсинга ini-файла, что-бы была организована работа с буфером а не с потоками (т.к. каждый раз для чтения ini-файла создаются/закрываются потоки... это не оптимально, надо будет подходящую библиотеку доробатывать, на примете inih, посмотрим, что можно сделать с ней :о)

буду благодарен за подсказки, ссылки, код итд ...

вопросы по написанию GUI и парсинг ini-файла будут позже

TAG: c,c++,gui,qt4,scripting

### UPDATE ###

протестировал (немного подрихтовал под себя) библиотеку
IniParser

простенькая, удобная, вполне годная!
итак, имеется два варианта работы с ini-файлом

- IniParser
- QSettings
★★★★

Последнее исправление: sunjob (всего исправлений: 6)

О! Я что-то подобное когда-то очень давно видел. Было популярно на телефонах марки Motorola, которые были на Linux’е.

Там был специальный EZX GUI на Qt 2, который приспособили для того, что ты описываешь.

Кратко как оно было:

https://habr.com/ru/post/212013/#comment_7296383 (советую прочитать по ссылке не только мой комментарий, но и полностью статью).

А я пока попробую найти исходники…

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

сенкЮ

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

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от EXL

интересно, гляну :о)

п.с. посмотрите мой исходник, если не сложно?

sunjob ★★★★
() автор топика
Ответ на: комментарий от Harald

дак мы-ж танцуем...

... танцы на куте-е-е-ееее! такого я не видал нигде!!!...

sunjob ★★★★
() автор топика
Ответ на: комментарий от Harald

Сие не мешает лазарю уметь в него компилироваться. И в GTK+2, что особенно ценно.

mertvoprog
()

так-же не встречал подходящих/удобных/минимальных примеров/библиотек парсинга ini-файла

Так в Qt уже все есть!

QSettings *config;
...
config = new QSettings( "./config.ini", QSettings::IniFormat );
...
int wh = config->value( "main/win_h", 800 ).toInt();

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

QT4 / QSettings / ini-file

я в курсе про QSettings, первым делом обратил на него внимание, но, те примеры, что шли с QT4 не работали (конкретная какая-то нестыковка типов была)

специально скачал с оффсайта две версии sdk_qt4 (полный набор фарша для qt4, втч qtcreator, помощь...)

ни в одном не прокатили хелпы (впрочем они в обоих были одинаковые)

короче, не шмаглая ...

п.с. естественно, когда руки дойдут до работы с ini-файлом, попробую очередной набег на кутью...

!!! ВНИМАНИЕ !!!
если у кого есть работчие примеры (желательно полные, чтение, запись, перебор, итд) в QT4 / QSettings & INI-file, выложите пожалуйста, сообщество будет благодарно! :о)

спасибо

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 6)
Ответ на: QT4 / QSettings / ini-file от sunjob

я в курсе про QSettings, первым делом обратил на него внимание, но, те примеры, что шли с QT4 не работали (конкретная какая-то нестыковка типов была)

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

// глобальная переменная
QSettings *config;

// чтение и парсинг конфиг-файла в main()
config = new QSettings( "./config.ini", QSettings::IniFormat );

// вывод всех ключей
qDebug << config->allKeys();

// чтение параметра из конфига
int wh = config->value( "main/win_h", 800 ).toInt();

// запись параметра
config->setValue( "main/win_h", 1234 );
Единственно, надо не забывать указывать тип параметра при чтении .toInt(), toString() и т.п.

sigurd ★★★★★
()
Ответ на: комментарий от unC0Rr

да, это «оно»... после баша непривычно...

спасибо

sunjob ★★★★
() автор топика
Ответ на: комментарий от sigurd

вроде как этот пример

qt4_help

решается нехитрым финтом ушных раковин :o)

#include <QStringList> // QStringList()
#include <QSize>       // QSize() 

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)

логично писать в той «эко-системе» в которой пишешь GUI

Это только на первый взгляд. Если ты будешь заниматься QT4 всю жизнь или долго, то да, такой подход был бы логичным. Но ведь это не так. Наверняка созреют условия для развития других парадигм. Например, поменяется системное окружение. Поэтому ГУЙ надо отделять от логики. Во времена Билдера я тоже думал, что сросся с ним навек. Понаписывал кучу кода и дополнений. Потом всё поудалял. Некоторых приложух сейчас конкретно не хватает. Не хватает базы по железякам на редком. Её я тоже снёс. И сейчас нахожусь как витязь на распутье. Кое-какие не мешало бы восстановить. Одну начал. Но уже не на Билдере. Но можно и на Билдере. Главное чтобы ГУЙ не был прибит гвоздями к ИДЕ. Короче говоря, если ты пишешь в конкретной экосистеме, то есть шанс привязать свой проект к времени жизни экосистемы. А оно зависит от политики кампании-производителя.

В целом, лёгких магистральных путей в инженерии нету. И в программной тоже. Везде будешь ломать голову и выбирать решений. У внедренцев та же самая беда – выбор, причём при любом бюджете.

Так что не спеши, подумай как следует.

anonymous
()
Ответ на: комментарий от anonymous

Не хватает базы по железякам на редком

диалекте СУБД (с дуру когда-то сваял). О чём думал? :-D Сейчас новые версии стоят мегаденьги.

anonymous
()

MVC-квест

anonymous
()
Ответ на: комментарий от anonymous

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

sunjob ★★★★
() автор топика
Ответ на: комментарий от EXL

EZX GUI & OpenForm

собрал OpenForm (правда мейкфайл формировался несовсем правильно, выдернул недостающие ключи из х64 версии)

работает, на удивление!

+

- UI - свой формат? qt4/5 дизайнер не может их открыть
- может есть какой хелп? (кроме исходников :о)

+

c EZX GUI - чуть посложнее, на ск.я понял, надо собирать SDK под текущую платформу и только потом собирать примеры...

пока отложил

спасибо

sunjob ★★★★
() автор топика
Ответ на: EZX GUI & OpenForm от sunjob

c EZX GUI - чуть посложнее, на ск.я понял, надо собирать SDK под текущую платформу и только потом собирать примеры…

Эти исходники просто как демонстрация того, каким способом оно было сделано. И сделано оно было весьма удачно, потому что народ начал юзать эти программки в своих Shell-скриптах только в путь. А ты у себя сильно перемудрил.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от sunjob

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

поэтому и квест ;)

anonymous
()
Ответ на: комментарий от EXL

А ты у себя сильно перемудрил

чего я там перемудрил? :о)

примеры не собираются, как минимум, без установленных хедеров, хедеры находятся в SDK... и еще не известно, как будут собираться примеры, м.б. для этого понадобятся их библиотеки, поэтому я и предположил что надо собирать (компилировать) SDK под Linux, потому как сам SDK заточен под ARM...

если что не то, поправьте?!

sunjob ★★★★
() автор топика

протестировал (немного подрихтовал под себя) библиотеку
IniParser

простенькая, удобная, вполне годная!
итак, имеется два варианта работы с ini-файлом

- IniParser
- QSettings

add to SorceForge
2020.06.26_ini_parser.tar.xz

sunjob ★★★★
() автор топика

IniParser

дотошно потестировал QSettings ... действительно ... не очень удобный и не доработанный «объект»
люди аж с 15го года на форумах его ругают, пишут про косяки и недоделанность... видимо, воз и ныне там :о)

остановился на IniParser - маленькая, простая, удобная, все на месте, под рукой, понятно-логично

спасибо

sunjob ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.