2013-04-10 3 views
1
  1. Я создал новый файл (data.xml) в своем обозревателе решений в Qt Creator, который автоматически был добавлен в папку файлов Other.
  2. Я создал фрагмент кода, который считывает данные из этого файла, но возникла проблема: файл не найден.
  3. Я скопировал файл в c://data.xml и изменил путь в коде также на c://data.xml, и все сработало хорошо.

Мой вопрос: как обращаться с этими относительными путями?Qt - Относительный вопрос пути

Это код:

QString filename="data.xml"; 
    QVector<Student> students; 
    QFile file(filename); 
    if (!file.open(QFile::ReadOnly | QFile::Text)) 
    { 
     return; 
    } 
    QDomDocument doc; 
    if (!doc.setContent(&file)) 
    { 
     file.close(); 
     return;; 
    } 
    file.close(); 
    QDomElement root = doc.documentElement(); 
    QDomElement studentNode = root.firstChildElement("Student"); 
    while(!studentNode.isNull()) 
    { 
     QString firstName=studentNode.firstChildElement("FirstName").text(); 
     QString lastName=studentNode.firstChildElement("LastName").text(); 
     int age=studentNode.firstChildElement("Age").text().toInt(); 
     students.push_back(Student(firstName, lastName, age)); 
     studentNode=studentNode.nextSiblingElement("Student"); 
    } 

Это файл проекта:

QT  += core gui xml 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = GUI1 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    editdialog.cpp \ 
    student.cpp 

HEADERS += mainwindow.h \ 
    editdialog.h \ 
    student.h 

FORMS += mainwindow.ui \ 
    editdialog.ui 

OTHER_FILES += \ 
    data.xml 

ответ

2

Все такие пути вычисляются относительно каталога, из которого вы запускаете приложение. QtCreator запускает программы из своих собственных каталогов. В вашем случае я бы рекомендовал вам добавить эту строку к вам pro file:

DESTDIR = $$PWD 
+0

Это работает. Спасибо. Это единственное решение для использования относительных путей в Qt? –

+1

Ну, 'QString QCoreApplication :: applicationDirPath()' содержит абсолютный путь к вашему каталогу приложений, поэтому вы всегда можете сделать что-то вроде этого: 'QString fileName = QDir (qApp-> applicationDirPath()). AbsoluteFilePath (" ../ etc /data.xml ")'. В любом случае, вам нужно точно знать, где находится ваша программа. Я рекомендую использовать стандартные каталоги Unix, такие как «bin», «etc», «share» и т. Д. – Amartel

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