1 (02.07.2020 04:27:36 отредактировано sunjob)

добрый день

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

!!! UPDATE !!!

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

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

спасибо

2

Добавлю свои пять копеек...
Visual Studio Code on Linux

3 (01.07.2020 22:46:35 отредактировано ValentinK)

MozgFx пишет:

Добавлю свои пять копеек...
Visual Studio Code on Linux

Скорее QtCreator + QtDeveloper.
Графический редактор форм на Qt, сохраняет лэйаут в XML.
Имеет удобный отладчик прямо в IDE с кодом.
Можно устанавливать точки прерываний и трассировать программу пошагово.

И почему Qt4, а не Qt5?

Я недавно экспериментировал с Qt и с выводом данных из базы данных.
Эксперимент прошёл успешно.

Fedora 35 KDE.
Linux is great and super! Long live rock'n'roll! Opera and libretto.
По-русски калинка-малинка моя! Люблю оливье и винегрет.
Yours sincerely, wasting away! Salute people!

4

ValentinK пишет:

И почему Qt4, а не Qt5?

Так то да к примеру в openSUSE 15.2 который сегодня выходит.
Написано в примечаниях к релизу следующее (собрал воедино общую мысль):
Устаревшие пакеты по-прежнему поставляются как часть дистрибутива, но будут удалены в следующей версии openSUSE Leap. Они существуют для облегчения миграции, но их использование не рекомендуется и для них могут отсутствовать обновления.

  • libqt4: Не будет получать ни обновлений, ни исправлений безопасности. Данный пакет будет удалён в следующей версии openSUSE Leap.

  • kdelibs4: Не будет получать ни обновлений, ни исправлений безопасности. Данный пакет будет удалён в следующей версии openSUSE Leap.

Рекомендуется обновление с KDE 4 и Qt 4 до Plasma 5 и Qt 5. KDE 4 и Qt 4 более не поддерживаются. openSUSE Leap 15.2 всё ещё содержит пакеты KDE 4 and Qt 4 в целях совместимости. Однако эти пакеты более не получают обновлений и исправлений безопасности. Поэтому все установленные пакеты KDE 4 и Qt 4 настоятельно рекомендуется заменить на пакеты Plasma 5 и Qt 5 с теми же или аналогичными функциями."