Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Nelkor от Сентябрь 27, 2014, 19:34



Название: Аргументы в приложении Qt
Отправлено: Nelkor от Сентябрь 27, 2014, 19:34
Задача такая - программа должна читать некий файл формата *.baw и производить какие-то свои действия.
Есть класс - bawReader и публичный метод open(QString), который открывает файл по его имени. Программа работает.
И вот, лежит у меня в папке файл, например file.baw, жму я на него правой кнопкой и выбираю "Открыть с помощью BawReader". Этим действием программа BawReader вызывается с аргументом, содержащим имя файла, который требуется открыть.
Собственно, цель - извлечь этот самый аргумент и передать его в функцию open.
И у меня ДАЖЕ есть код, который работает. Вот он: (осторожно, индусский код)

Код:
#include "bawreader.h"
#include <QApplication>

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

    BawReader w;
    w.show();

    QString str;
    for (int j = 0; j < sizeof(argv); j++){
        str.append(argv[j]);
    }

    if (!str.isEmpty()){
        QStringList strlist = str.split(".exe");
        if (strlist.count() > 1){
            if (strlist.at(1).contains(".baw")) w.open(strlist.at(1));
        }
    }
   
    return a.exec();
}

Первое - QtCreator ругается на "for (int j = 0; j < sizeof(argv); j++)", говорит, что D:\Qt\BawReader\main.cpp:12: предупреждение: comparison between signed and unsigned integer expressions [-Wsign-compare]
Второе - код ужасно индусский, однако прекрасно работает. Вот посоветуйте, не трогать его (пусть работает), или делать по-нормальному (тогда подскажите, как)?


Название: Re: Аргументы в приложении Qt
Отправлено: Nidxogg от Сентябрь 27, 2014, 19:48
QStringList QCoreApplication::arguments () [static]


Название: Re: Аргументы в приложении Qt
Отправлено: Igors от Сентябрь 27, 2014, 19:52
char *argv[] - это то же самое что и char **, т.е. указатель, и его sizeof = 4( 8 ). И чего Вы туда полезли если есть argc (число аргументов) а еще лучше QStringList QCoreApplication::arguments

И не contains a endsWith. Букварь-то читать надо, а не фигню молотить


Название: Re: Аргументы в приложении Qt
Отправлено: vitfil от Сентябрь 27, 2014, 19:54
1. argc - это количество переданных аргументов.
2. Первый аргумент есть всегда - это имя исполняемого файла

Исходя из этого, если аргументов 2, то было ваше "Открыть с помощью..."
Значит, можно просто передать второй аргумент:
w.open(argv[1]);


Название: Re: Аргументы в приложении Qt
Отправлено: Nelkor от Сентябрь 27, 2014, 19:58
Спасибо, всё получилось! Когда-нибудь я перестану быть индусом благодаря вам!)