2014-09-15 3 views
0

В настоящее время я пытаюсь создать графический интерфейс для существующей программы командной строки с использованием QT в качестве учебного упражнения.Как вызвать функцию с argc & argv?

Оригинальный код был написан c, и я включил c-оболочку c бит. Я взял оригинал

int main(int argc, char **argv) 

и превратил его в обычную функцию (сменил название).

У меня есть несколько Qt флажков, сделанных действовать в качестве входных данных, (например, -v активированной многословной в CmdLine, так что теперь у меня есть подробный флажок, что делает символ многословным = к «v»)

Есть также несколько других аргументов, которые принимают числа, например -t 4 для 4 потоков.

Параметры в исходной программе реализована следующим образом:

while ((opt = getopt(argc, argv, "vqnrik1eE:P:NTX:F:t:h?f:o:s:")) != -1) { 
    switch (opt) { 
case 'v': 
     verbose = 2; 
     break; 

и т.д.

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

Спасибо,

+1

http://meta.stackexchange.com/questions/129598/which-computer-science-programming-stack-exchange-do-i-post-in/129632#129632 –

+0

Что делает программа командной строки? Всегда ли он работает быстро (т. Е. Менее десятой доли секунды)? Если это может занять более нескольких секунд, ваш подход неправильный (вы не можете позволить себе замораживать графический интерфейс в течение нескольких секунд) –

ответ

3

Вы, вероятно, следует отойти от аргументов и установить переменные управления непосредственно:

if(verboseCheckBox->checked()){ 
    verbose=2; 
} 
//etc. 
0

Просто позвоните с массивом строк, например, так:

char* argv[4] = {executing_path, "-t 4","v","random_argument"}; 
const int argc = sizeof(argv)/sizeof(char*); 
main(argc, argv); 

Примечание что первый параметр обычно представляет собой полный путь к исполняемому файлу, который вы получаете в основной функции. Если возможно, я буду придерживаться такого же поведения; иногда аргументы разбора кода делают это в диапазоне 1... n-1, поэтому пропускают первое значение в массиве.

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

Смежные вопросы