Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: LinuxFanUNIX в May 28, 2009, 12:23



Титла: Приемане на аргументи от Bash в Qt4
Публикувано от: LinuxFanUNIX в May 28, 2009, 12:23
Добър ден.

Имам следния въпрос: Как мога да направя, така че да мога да обработвам аргументи от bash в Qt4? И за да е по-ясен въпроса, ще дам пример:
Имам програма с име: Application.
Ако към нея, през командния ред, подам --info например, как мога да свържа този аргумент със някой слот да речем? Ако не става, поне няма ли начин да се запише подадения аргумент в стринг от типа QString?

Благодаря предварително!


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: task_struct в May 28, 2009, 13:05
Както винаги отговорът е в документацията: http://doc.qtsoftware.com/4.5/qapplication.html#QApplication

argc е борят на аргументите, а argv е масив с техните стойности. Можеш да си напишеш парсър.

Друг вариант е да изпозлваш от КДЕ библиотеката класът KCmdLineArgs:
http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/classKCmdLineArgs.html
Пример: http://techbase.kde.org/Development/Tutorials/KCmdLineArgs
 Знам че си падаш по КДЕ3, така че го потърси в неговата документация и там съществува, доколкото знам :) Ако не искаш да линкваш с КДЕ библиотеки, можеш да изпозлваш кода за да си направиш свой клас ;)

Успех!  [_]3


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: LinuxFanUNIX в May 28, 2009, 14:55
Както винаги отговорът е в документацията: http://doc.qtsoftware.com/4.5/qapplication.html#QApplication

argc е борят на аргументите, а argv е масив с техните стойности. Можеш да си напишеш парсър.

Друг вариант е да изпозлваш от КДЕ библиотеката класът KCmdLineArgs:
http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/classKCmdLineArgs.html
Пример: http://techbase.kde.org/Development/Tutorials/KCmdLineArgs
 Знам че си падаш по КДЕ3, така че го потърси в неговата документация и там съществува, доколкото знам :) Ако не искаш да линкваш с КДЕ библиотеки, можеш да изпозлваш кода за да си направиш свой клас ;)

Успех!  [_]3
Ми не, сега ползвам MacOS обаче ще погледна все пак какво пише в документацията... :)


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: LinuxFanUNIX в May 28, 2009, 15:06
Както винаги отговорът е в документацията: http://doc.qtsoftware.com/4.5/qapplication.html#QApplication

argc е борят на аргументите, а argv е масив с техните стойности. Можеш да си напишеш парсър.

Друг вариант е да изпозлваш от КДЕ библиотеката класът KCmdLineArgs:
http://api.kde.org/4.x-api/kdelibs-apidocs/kdecore/html/classKCmdLineArgs.html
Пример: http://techbase.kde.org/Development/Tutorials/KCmdLineArgs
 Знам че си падаш по КДЕ3, така че го потърси в неговата документация и там съществува, доколкото знам :) Ако не искаш да линкваш с КДЕ библиотеки, можеш да изпозлваш кода за да си направиш свой клас ;)

Успех!  [_]3
А може ли примерче, тъй като нещо не можах да се ориентирам.


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: task_struct в May 28, 2009, 15:16
За кой от вариантите?


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: LinuxFanUNIX в May 28, 2009, 15:38
За кой от вариантите?
QApplication (argc, argv)


Титла: Re: Приемане на аргументи от Bash в Qt4
Публикувано от: task_struct в May 28, 2009, 16:45
Тъй като ще стане много дълго, няма да пиша цял пример, а само идей какво може да се направи.

Такааа...  :)

argc ти е броят на подадените аргументи.. Според мен най-лесно би било да си сложиш аргументите в един QStringList, за по лесна обработка
Код:
QStringList argsList;
int i=1; // 0 e името на програмата
while(i<argc)
{
    argsList.append(QString(argv[i]));
}


Такааа вече имаме всички аргументи в 1 списък :) Сега парсването ...

създаваш си статично един QMap с ключ аргумента и стойност указател към функция примерно то вида void ArgName(QStringList &args) В args се съхраняват аргументите на опцията. Примерно: --file alabala.txt, args ще има един елемент - alabala.txt :)

И сега започваш да въртиш 1 цикъл през argsList-а като всеки елемент го проверяваш в QMap-а дали съществува, ако го има премахваш го от тоя лист и в викаш функцията на която съответства с аргументите следващите там колкото трябват елемтана от листа и тях също ги премахваш. (тук се сещам че трябва да имаш някакъв механизъм с който да знаеш коя опция колко аргумента иска :) (може пак с map а може и някакви класове или структура :) ) и това го правиш докато не ти свърши Листа или не срещнеш някакъв ерор при парсването (това сам си го определяш спрямо логиката на приложениеот ти :) ) че май е това като за на бързо измислено в почивката :) Действай :)  [_]3