Get current working directory in a Qt application

后端 未结 5 1665
春和景丽
春和景丽 2020-12-04 23:13

I\'m writing a program in C++ using the Qt library. There is a symbolic link in my home bin directory to the executable. I would like the current working directory of my pro

5条回答
  •  时光取名叫无心
    2020-12-04 23:51

    To add on to KaZ answer, Whenever I am making a QML application I tend to add this to the main c++

    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    
    // get the applications dir path and expose it to QML 
    
    QUrl appPath(QString("%1").arg(app.applicationDirPath()));
    engine.rootContext()->setContextProperty("appPath", appPath);
    
    
    // Get the QStandardPaths home location and expose it to QML 
    QUrl userPath;
       const QStringList usersLocation = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
       if (usersLocation.isEmpty())
           userPath = appPath.resolved(QUrl("/home/"));
       else
          userPath = QString("%1").arg(usersLocation.first());
       engine.rootContext()->setContextProperty("userPath", userPath);
    
       QUrl imagePath;
          const QStringList picturesLocation = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
          if (picturesLocation.isEmpty())
              imagePath = appPath.resolved(QUrl("images"));
          else
              imagePath = QString("%1").arg(picturesLocation.first());
          engine.rootContext()->setContextProperty("imagePath", imagePath);
    
          QUrl videoPath;
          const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
          if (moviesLocation.isEmpty())
              videoPath = appPath.resolved(QUrl("./"));
          else
              videoPath = QString("%1").arg(moviesLocation.first());
          engine.rootContext()->setContextProperty("videoPath", videoPath);
    
          QUrl homePath;
          const QStringList homesLocation = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
          if (homesLocation.isEmpty())
              homePath = appPath.resolved(QUrl("/"));
          else
              homePath = QString("%1").arg(homesLocation.first());
          engine.rootContext()->setContextProperty("homePath", homePath);
    
          QUrl desktopPath;
          const QStringList desktopsLocation = QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
          if (desktopsLocation.isEmpty())
              desktopPath = appPath.resolved(QUrl("/"));
          else
              desktopPath = QString("%1").arg(desktopsLocation.first());
          engine.rootContext()->setContextProperty("desktopPath", desktopPath);
    
          QUrl docPath;
          const QStringList docsLocation = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
          if (docsLocation.isEmpty())
              docPath = appPath.resolved(QUrl("/"));
          else
              docPath = QString("%1").arg(docsLocation.first());
          engine.rootContext()->setContextProperty("docPath", docPath);
    
    
          QUrl tempPath;
          const QStringList tempsLocation = QStandardPaths::standardLocations(QStandardPaths::TempLocation);
          if (tempsLocation.isEmpty())
              tempPath = appPath.resolved(QUrl("/"));
          else
              tempPath = QString("%1").arg(tempsLocation.first());
          engine.rootContext()->setContextProperty("tempPath", tempPath);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
    }
    

    Using it in QML

    ....
    ........
    ............
    Text{
    text:"This is the applications path: " + appPath
    + "\nThis is the users home directory: " + homePath
    + "\nThis is the Desktop path: " desktopPath;
    }
    

提交回复
热议问题