LINUX.ORG.RU

Передача нескольких файлов как параметры командной строки

 


0

1

Как передать несколько файлов (имен файлов) в программу через командную строку? Пробую вот так перечислить все параметры:

    QStringList arguments = QCoreApplication::arguments();
    QMessageBox::information( 0, "App Name", QString::number( arguments.count()));

    for ( int i=0; i<arguments.count(); i++ ){
        QMessageBox::information( 0, "Tag Editor", arguments.at(i));
    }

Выделяю несколько файлов в Dolphin и выбираю меню -> Открыть с помощью <My App>. Программа запускается, но для каждого файла стартует отдельный экземпляр программы. А нужно чтобы один экземпляр получал все имена файлов. Что-то типа enqueue.

Запуск одного экземпляра сделал через

QSharedMemory sharedMemory;
sharedMemory.setKey("AppKey");

теперь стартует один экземпляр, но по прежнему только с одним файлом. Как затолкать все файлы в один instance программы?

★★★

Ответ на: комментарий от RazrFalcon

А вы уверены что Dolphin все выбранные передаёт?

Чукча пейсатель:

Программа запускается, но для каждого файла стартует отдельный экземпляр программы.

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

ну вот весь код,хотя он вообще не нужен.

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    QString cmd;


    QStringList arguments = QCoreApplication::arguments();
    QMessageBox::information( 0, "Tag Editor", QString::number( arguments.count()));

    for ( int i=0; i<arguments.count(); i++ ){
        QMessageBox::information( 0, "Tag Editor", arguments.at(i));
    }


    QSharedMemory sharedMemory;
    sharedMemory.setKey("AppKey");



    if (!sharedMemory.create(1))
    {
        QMessageBox::warning(0, "Warning!", "An instance of this application is running!" );

        exit(0);
    }




    MyAppClass c (0, cmd);
    c.show();
    return a.exec();
}

Проблема в том, как передать в программу несколько имен файлов. Чтобы они все были отображены в command line arguments на входе в main()

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

Я не знаю, как это в куте. Но в Glib передается массив GLib.File — GLib.File[]. А дальше нужен код, который будет обрабатывать этот массив в Application.

anonymous
()
Ответ на: Qt ни при чём от anonymous

За запуск программы и передачу ей аргументов отвечает Dolphin, а не Qt.

А ты часом не глупость написал? При чем тут Dolphin и Qt? Подсказка:

$ ./myapp param1 param2 param3

anonymous
()
Ответ на: Qt ни при чём от anonymous

Взял файл kate.desktop в качестве шаблона, заменил Exec на свою программу, сохранил в /usr/share/applications как MyApp.desktop но это ничего не дало. Пробовал %U и %F. Может этот desktop как-то зарегистрировать в системе надо?

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

Оно, только в программу передается всего один аргумент, независимо от того, сколько файлов я пытаюсь открыть.

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

Сделай, что-то типа:

for (i=0; i < arg_count; i++) {

 print ("arg %d: %s", i, args[i].to_string);
}

Тебе нужен метод, который будет обрабатывать этот string_list, так как ты хочешь, Просто у тебя его нету.

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

С обработкой там все нормально.

Сейчас заработало, после того как сделал .desktop файл в ~/.local/share/applications

До этого пробовал положить его /usr/share/applications - там не работает почему-то.

В общем проблема решена, спасибо всем.

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