Russian Qt Forum

Qt => Общие вопросы => Тема начата: iamunix от Апрель 26, 2010, 01:27



Название: Как передать параметры приложению ? (Mac OS X и argc/argv)
Отправлено: iamunix от Апрель 26, 2010, 01:27
Всем привет!
Возникла проблема - не могу передать параметры приложению... (
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QStringList list = app.arguments();
   for( int i=0; i<list.size(); ++i )
        qDebug() << list.at(i);
 
   for( int i=0; i<argc; ++i )
        qDebug() << argv[i];
   return app.exec();
}
 

При запуске в консоль будет выведен полный путь приложения, например - "/Users/fix/Codes/Qt/arguments/application.app".

Приведенный выше код будет корректно работать если открыть терминал и, для данного примера, выполнить последовательность команд:
Код:
cd /Users/fix/Codes/Qt/arguments/
cd application.app/Contents/MacOS
./application arg1 arg2 arg3 etc


Допустим я пишу текстовый редактор и хочу открывать все txt файлы в нем. Поидее, в свойствах какого либо текстового файла (cmd + i) я должен указать "открывать с помощью". Теперь, при двойном клике на таком файле, система запустит мое приложение (argv[0]) и НЕ передаст ему путь к файлу (argv[1]).

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

Заранее всем проявившим внимание - огромное спасибо =)





Название: Re: Как передать параметры приложению ? (Mac OS X и argc/argv)
Отправлено: Авварон от Апрель 26, 2010, 08:16
я слышал что в маке там есть спецэвент для этого, он же приходит при драгэнддропе на иконку в доке
см в креаторе, там есть нужный функционал


Название: Re: Как передать параметры приложению ? (Mac OS X и argc/argv)
Отправлено: Igors от Апрель 26, 2010, 11:48
На OSX application обычно "bundle" (можно посмотреть "Show Package Content").

1) Есть файл info.plist который компилятор поместит в bundle. В этом файле нужно настроить типы файлов которые данное app умеет открывать. Тогда Вы сможете "бросать" файлы на иконку app

2) Открываемые файлы не приходят в командной строке, вместо этого app получает appleEvent. Вам надо сделать AEInstallEventHandler и, поймав событие, извлечь из него файлы через AECoerceDesc. http://doc.trolltech.com/qq/qq12-mac-events.html (http://doc.trolltech.com/qq/qq12-mac-events.html) (хотя там надо рихтовать)