Версия для печати темы
Форум на CrossPlatform.RU _ Qt Общие вопросы _ Открытие своего файла в своей программе
Автор: RazrFalcon 1.6.2010, 19:53
Прога сохраняет к примеру .prm и по нажатии на него открывается моя прога и в ней открывается сразу же и файл.
Как это сделать?
Автор: Litkevich Yuriy 2.6.2010, 15:08
Цитата(RazrFalcon @ 1.6.2010, 23:53)

и по нажатии на него
это что имеется в виду?
Автор: RazrFalcon 2.6.2010, 15:25
Цитата(Litkevich Yuriy @ 2.6.2010, 15:08)

Цитата(RazrFalcon @ 1.6.2010, 23:53)

и по нажатии на него
это что имеется в виду?
Имеется в виду что при двойном клике по .blend .max .txt и тд и тп открываются соответствующие приложения и соответственно "нажимаемый файл тоже", как это реализовать со своей прогой и своим форматом, да и с другим тоже.
Грубо говоря надо передать проге путь к файлу на который кликаем.
Автор: Litkevich Yuriy 2.6.2010, 16:06
Цитата(RazrFalcon @ 2.6.2010, 19:25)

двойном клике по .blend .max .txt
а клик-то где? В файловом менеджере?
Автор: MoPDoBoPoT 2.6.2010, 16:29
Это что ли?
http://www.prog.org.ru/index.php?topic=7960.msg41821#msg41821
Автор: RazrFalcon 2.6.2010, 16:32
Цитата(Litkevich Yuriy @ 2.6.2010, 16:06)

Цитата(RazrFalcon @ 2.6.2010, 19:25)

двойном клике по .blend .max .txt
а клик-то где? В файловом менеджере?
Ну да, в проводнике или на рабочем столе хоть. Ну даже пусть в тотал командере, которым в принципе не пользуюсь.
QFileDialog или как-то так это работает, нажал кнопку, выбрал файл и он открылся, а вот как впихнуть в QFile путь к файлу открытому мной, так скажем. Все остальные мало-мальские проги это делают.
Соответствие ставить пробовал, толку 0. Просто прога по нажатии открывается и все, без файла.
Цитата(MoPDoBoPoT @ 2.6.2010, 16:29)

Это что ли?
http://www.prog.org.ru/index.php?topic=7960.msg41821#msg41821
Ну я это делал просто через "Открыть с помощью" -> Использовать всегда только эту программу. Прога запустилась но без файла опять же.
Автор: Litkevich Yuriy 2.6.2010, 16:53
RazrFalcon, тут нужно с задачей (вопросом) определится точнее:
1) Как открыть файл данных некой программой из командной строки?
2) Как открыть файл данных из самой программы (как пользоваться QFileDialog)?
Ответы
1) файл данных передаётся как аргумент командной строки программы, этот аргумент можно получить из функции main или через QCoreApplication::args()
2) Смотри пример %QTDIR%\examples\dialogs\standarddialogs, там ты узнаешь как получить полное имя файла (вместе с путём), это имя передаёшь в конструктор QFile
Автор: RazrFalcon 2.6.2010, 17:31
Не то, не то, не то.
В программе я могу сделать, и сделано в принципе, нажал кнопку открылся/сохранился файл (путь указан статически или вводится)
Могу и по типу "Открыть/Сохранить как": нажал кнопку-> открылся диалог-> выбрал файл/путь -> прога открывает/сохраняет файл.
Но вот задача:
Я на рабочем столе, к примеру, имею файл с расширение .primer, допустим. И хочу его открыть. Дважды на нем клацаю и открывается моя прога и в нее передается путь и файл на который я клацал тут же открывается. Без командных строк и тп. При условии конечно что у меня установлена аасоциация с моей прогой, но даже без этого оно спросит какой прогой открыть и я выберу свою.
Вроде бы все. Может что-то еще уточнить?
Пример: клацнул по текстовику и открылся блокнот, КАК он узнал какой файл открыть?
Автор: Litkevich Yuriy 2.6.2010, 17:58
Цитата(RazrFalcon @ 2.6.2010, 21:31)

Без командных строк и тп
на самом деле всё работает через командную строку
Цитата(RazrFalcon @ 2.6.2010, 21:31)

КАК он узнал какой файл открыть?
в реестре записано
HKEY_CLASSES_ROOT\.txt
-- (по умолчанию) =
txtfileHKEY_CLASSES_ROOT\
txtfile-- (по умолчанию) = Текстовый документ
HKEY_CLASSES_ROOT\
txtfile\shell\open\command
-- (по умолчанию) = %SystemRoot%\system32\NOTEPAD.EXE %1
И, как видишь, командная строка, аргумент командной строки - шаблон, вместо которого подставится имя файла
Автор: RazrFalcon 2.6.2010, 18:24
Хмммм... Весьма странно но теперь работает
QSettings reg("HKEY_CLASSES_ROOT", QSettings::NativeFormat);
QFile file(reg.value("/MyProg.mpf/shell/open/command/.").toString());
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
return;
MoPDoBoPoT дал полезную ссылку, спасибо.
Только все равно как то странно, по этому пути в реестре пусто ведь, все время, сам проверял.
Но путь пишет и открывает, а мне большего и не нужно.
Все спасибо за еще один шаг вперед.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)