Как вызвать функцию с argc & argv?

0

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

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

int main(int argc, char **argv)

и превратил его в нормальную функцию (сменил имя).

У меня есть несколько флажков qt, сделанных для ввода ввода (например, -v активирована verbose в cmdline, так что теперь у меня есть подробный флажок, который делает char verbose = to "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
    meta.stackexchange.com/questions/129598/...
  • 0
    Что делает программа командной строки? Всегда ли он работает быстро (т. Е. Менее одной десятой секунды)? Если он может работать более чем за несколько секунд, ваш подход неправильный (вы не можете позволить себе заморозить графический интерфейс на несколько секунд)
Теги:
qt

2 ответа

4

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

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 поэтому пропускают первое значение в массиве.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню