2013-08-27 2 views
1

В приложении, которое я разрабатываю (используя C++ и Qt), я использую QApplication :: applicationDirPath() для доступа к некоторым ресурсам в отношении пути приложения.Могу ли я использовать applicationDirPath() для доступа к ресурсам на более высоком уровне каталогов?

В качестве примера, так как я хочу, чтобы открыть HTML руководство из приложения, я поступаю так:

void MainWindow::on_actionHelp_triggered() 
{ 
    QString link = QApplication::applicationDirPath() + "/Guide/guide.html"; 
    bool r = QDesktopServices::openUrl(QUrl::fromLocalFile(link)); 
} 

Этот фрагмент кода работает, если структура проекта представляет путь «ProjectName/bin/Release/Руководство /guide.html "(так как файл .exe находится в« ProjectName/bin/Release/AppName.exe »).

Но что я могу сделать, чтобы обратиться к ресурсу с более высоким каталогом? В качестве примера, я хочу, чтобы мой файл HTML находился в «ProjectName/data/Guide/guide.html». Но таким образом, кажется невозможным составить путь в том, как я действую.

EDIT: После того, как @ комментарий Олив, я хотел бы уточнить вещь: «Почему я не использую„../“?» Потому что он не будет работать с Visual Studio, где я массово запустить приложение для его проверки. На самом деле, я бы использовал «../data/Guide/guide.html», когда «со стороны» мне пришлось бы делать «../../data/Guide/guide.html», ,

Вот почему (я думаю) QApplication :: applicationDirPath() существует. Тем не менее, я не эксперт, поэтому не обвиняйте меня и не исправляйте мою возможную ошибку, пожалуйста!

+0

Можете ли вы попробовать с ".. \ .. \ data/Guide/guide.html"? – Ashif

+0

Спасибо за ваше предложение, оливковое, но это не то, что я ищу, * если возможно *. Я редактировал свой вопрос. –

ответ

3

Просто используйте ... QApplication::applicationDirPath() + "/../../data/Guide/guide.html" - это действительно действующий путь!

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

+0

Спасибо Ян !!! Я подозревал, что это тоже может работать, но я пропустил первую косую черту ... Более того, он работает как от VS, так и от пути bin. Я буду следовать твоему совету, кстати, и посмотрю, в какой конфигурации ты говоришь. –

+1

@BiG: вы можете настроить, где двоичный файл находится в _Project Properties_, либо устанавливая _Output Directory_ в закладке _General_, либо _Output File_ на вкладке _Linker/General_ (hm, это VS2008, я не уверен в VS2010). Вы также можете установить рабочий каталог на вкладке _Debugging_, но быть независимым от него с помощью 'applicationDirPath' лучше. –

+0

Я использую VS2010, и я подтверждаю, что он работает одинаково! Большое вам спасибо ... Снова ;-) –

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