Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Path of Application Bundle - Solved
Forum Updated to NodeBB v4.3 + New Features

Path of Application Bundle - Solved

Scheduled Pinned Locked Moved General and Desktop
13 Posts 3 Posters 11.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    tobias.hunger
    wrote on last edited by
    #3

    The "Projects" view in Qt Creator visualizes the build system structure and is not necessarily related to the file system. Please use the Filesystem view to check the actual structure of the file system.

    1 Reply Last reply
    0
    • B Offline
      B Offline
      blissful
      wrote on last edited by
      #4

      Hi
      I've added the file to the Resources by "Adding New Resource File".
      I called my .qrc file MyResources.qrc
      For the prefix, I put "files".

      I've tried:
      QString stringPath = QCoreApplication::applicationFilePath();
      stringPath = stringPath + "/../Resources/files/";

      and

      QString stringPath = QCoreApplication::applicationFilePath();
      stringPath = stringPath + "/Resources/files/";

      Both are not working for me.

      Am I missing something?

      Thank you in advance...

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #5

        Yes you are,

        The Resources from Qt are not the same thing as the Resources folder from an app bundle on OS X.

        Read Qt's "resources documentation":http://qt-project.org/doc/qt-4.8/resources.html to have a better understanding of how to use them

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • B Offline
          B Offline
          blissful
          wrote on last edited by
          #6

          Hi
          Ok, I just read it....I'm starting to think that using the Qt resource system (.qrc) is not the way to go....
          In there it says:
          "The Qt resource system is a platform-independent mechanism for storing binary files in the application's executable"

          Basically I have a function
          swe_set_ephe_path(char * parameter)
          that takes in a char * as a parameter.
          The char * parameter should be the path to the directory where I store this file called "fixstars.cat".
          I think it should be able to find the "fixstars.cat" file as it is and not as a binary file.

          I'm using a 3rd party API. To be able to use it properly for me, I should tell the API in which directory to find fixstars.cat, by passing in the path to the swe_set_ephe_path(char * parameter) function.

          How can I achieve this in Qt?

          Thank you very much for the help.

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #7

            Something like ?

            @QByteArray local8Bit = stringPath.toLocal8Bit();
            swe_set_ephe_path(local8Bit.data());@

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • B Offline
              B Offline
              blissful
              wrote on last edited by
              #8

              Hi
              Actually, it is finding the right path to convert to char * that is my problem.
              Here is my code:

              @QString stringPath = QCoreApplication::applicationFilePath();

              stringPath = stringPath + "/Resources/files/";
              
              qDebug() << stringPath;
              
              QByteArray ba = stringPath.toLocal8Bit();
              char * c_str2 = ba.data();
              
              swe_set_ephe_path(c_str2);
              
              
              double x[6];
              char serr[365];
              long ret_flag = swe_fixstar_ut("Spica", 300, SEFLG_NONUT, x, serr);
              
              qDebug() << ret_flag;
              

              @

              ret_flag prints out in the console as -1.
              Meaning to say, i didn't enter the correct path to where fixstars.cat is.
              I have added fixstars.cat to a .qrc file with "files" as the prefix.

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #9

                A .qrc resource is embedded in your binary not in your app bundle. Copy your fixstars.cat in your bundle or copy it from your resources to a temporary file and give the path to that temporary file to swe_set_ephe_path.

                Anyway, you can't give a Qt resources path to a framework that doesn't support that, it won't be able to read it.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  blissful
                  wrote on last edited by
                  #10

                  Hi
                  Ok. That is very good advice. Thank you.
                  I've been trying to go that route now.
                  I have been experimenting with the code to write to file:
                  @void MainWindow::write()
                  {
                  QFile file(QCoreApplication::applicationDirPath() + "/out.txt");
                  if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
                  {
                  qDebug() << "CANNOT OPEN";
                  return;
                  }

                       qDebug() << "FILE OPENED";
                       QTextStream out(&file);
                       out << "The magic number is: " << 49 << "\n";
                  
                       file.flush();
                       file.close();
                  

                  }@

                  I get the "FILE OPENED" string printed out to the console.
                  I would think that "out.txt" file would be created inside the folder where the executable for this app is. I go there and don't see any file.
                  I then search for out.txt in the Finder Window (I'm using a mac) and can't find any out.txt inside my comp.

                  What am I doing incorrectly?
                  Howcome I can't write to that file.
                  I haven't created the out.txt, but based on some tutorials i've seen and read, i think the file should be created automatically by Qt if it doesn't exist....(I might be wrong, but that's what I think...)...

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #11

                    I think you are currently getting to fast.

                    First thing to do is to check what file path you have i.e
                    @qDebug() << file.fileName();@
                    That will tell you where it is located.

                    It should be created indeed. I don't know what is going wrong.

                    In any case, i would suggest you to start simple:
                    Put your fixstars.cat file in known location (i.e. Documents), try to load it from there using Qt. Once that work, move it in your bundle Resources/files subdirectory. Load it from there.

                    Before embedding the file in you binary, answer these questions: Is it subject to change ? If so, how often ? Is it then really worth to put it in the binary rather than the bundle ?

                    Hope it helps

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      blissful
                      wrote on last edited by
                      #12

                      Hi
                      Thank you so much :)
                      I've managed to write the code for what I want:

                      @
                      void MainWindow::read()
                      {
                      QFile mFile("/Users/bliss/Documents/fixstars.cat");

                      if(!mFile.open(QFile::ReadOnly | QFile::Text))
                      {
                          qDebug() << "could not open file for reading";
                          return;
                      }
                      
                      QTextStream in(&mFile);
                      QString mText = in.readAll();
                      
                      qDebug() << mText;
                      
                      
                      
                      mFile.flush();
                      mFile.close();
                      

                      }

                      void MainWindow::readFromResource()
                      {
                      QFile mFile(":/files/fixstars.cat");

                      if(!mFile.open(QFile::ReadOnly | QFile::Text))
                      {
                          qDebug() << "could not open file for reading";
                          return;
                      }
                      
                      QTextStream in(&mFile);
                      QString mText = in.readAll();
                      
                      qDebug() << mText;
                      
                      
                      qDebug() << "FROM readFromResource()";
                      
                      mFile.flush();
                      mFile.close();
                      

                      }

                      void MainWindow::readFromResourceWriteToApplicationDir()
                      {
                      QFile mFile(":/files/fixstars.cat");

                      if(!mFile.open(QFile::ReadOnly | QFile::Text))
                      {
                          qDebug() << "could not open file for reading";
                          return;
                      }
                      
                      QTextStream in(&mFile);
                      QString mText = in.readAll();
                      
                      
                      QFile file&#40;QCoreApplication::applicationDirPath(&#41; + "/fixstars.cat");
                      
                      
                           if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
                           {
                               qDebug() << "CANNOT OPEN";
                               return;
                           }
                      
                           qDebug() << "FILE OPENED";
                           QTextStream out(&file);
                           out << mText;
                      
                      
                           qDebug() << file.fileName();
                      
                           file.flush();
                           file.close();
                      

                      }@

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #13

                        You're welcome !

                        You don't need the QTextStream if you are reading the complete file anyway, QFile also has a readAll.

                        Don't forget to update the thread's title to solved so other forum users may know that a solution has been found :)

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved