2016-01-25 2 views
0

Я строю какой-то музыкальный плеер, и у меня есть проблема с именем файла, которое передается в аргумент командной строки при двойном щелчке.Как строка, которая переходит в аргумент командной строки, когда я выбираю открыть файл с моим приложением?

У игрока есть QLabel, который показывает название песни, которая воспроизводится в данный момент, которую я получаю, анализируя путь к песне, который хранится в QStringList. Поэтому, когда я открываю файлы из приложения через команду QFileDialog, все работает нормально, и я получаю правильное имя, но когда я пытаюсь открыть файл через свое приложение извне (например, путем двойного щелчка mp3-файла) строка I get выглядит как this (мой системный язык не является китайским), он тоже отличается каждый раз.

Я передаю линию аргумент команды в моем классе MainWindow, как это:

QString arg; 

    arg = argv[1]; 

    SoSoMain w(arg); //explicit SoSoMain(QString arg, QWidget *parent = 0); 

Затем добавляют к QStringList и оттуда получает доступ к QLabel через другую функцию, которая просто отрезает все перед косой чертой и расширением, поэтому я не вижу, как может повлиять мой код.

Буду очень признателен, если кто-нибудь сможет объяснить мне, почему это происходит и как это исправить. Спасибо в Avance!

ответ

0

Вначале необходимо создать экземпляр класса QApplication. Вы можете сделать это, как:

QApplication app(argc, argv); 

Тогда вы можете получить список аргументов с

app.arguments(); 

который возвращает QStringList со всеми аргументами командной строки.

Обычно аргументы(). У (0) это имя программы, аргументы(). В (1) является первый аргумент, и аргументы(). Последний() является последним аргументом.

В Windows список построен только из параметров argc и argv , если модифицированные параметры argv/argc передаются конструктору. В случае в этом случае могут возникнуть проблемы с кодированием.

В противном случае аргументы() построены из возвращаемого значения GetCommandLine(). В результате этого строка, заданная аргументами(). At (0), может не быть именем программы в Windows, в зависимости от того, как приложение было запущено.

+0

Спасибо, я сделал это, но все равно, ничего не изменилось. – Goldutop

+0

Я не вижу никакого кода, поэтому я не могу помочь. Вы можете попробовать распечатать с помощью 'qDebug()' выход метода 'arguments' и посмотреть, где находится название песни. – Evgeny

+0

На самом деле это показывает идеальный путь к файлу в qDebug(), я действительно не получаю это ... – Goldutop

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