Russian Qt Forum
Май 03, 2024, 08:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Аргументы в приложении Qt  (Прочитано 4257 раз)
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]
Второе - код ужасно индусский, однако прекрасно работает. Вот посоветуйте, не трогать его (пусть работает), или делать по-нормальному (тогда подскажите, как)?
Записан
Nidxogg
Гость
« Ответ #1 : Сентябрь 27, 2014, 19:48 »

QStringList QCoreApplication::arguments () [static]
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 27, 2014, 19:52 »

char *argv[] - это то же самое что и char **, т.е. указатель, и его sizeof = 4( 8 ). И чего Вы туда полезли если есть argc (число аргументов) а еще лучше QStringList QCoreApplication::arguments

И не contains a endsWith. Букварь-то читать надо, а не фигню молотить
Записан
vitfil
Гость
« Ответ #3 : Сентябрь 27, 2014, 19:54 »

1. argc - это количество переданных аргументов.
2. Первый аргумент есть всегда - это имя исполняемого файла

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

Спасибо, всё получилось! Когда-нибудь я перестану быть индусом благодаря вам!)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.