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. QFileDialog file not found

QFileDialog file not found

Scheduled Pinned Locked Moved General and Desktop
7 Posts 5 Posters 7.8k 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.
  • A Offline
    A Offline
    anduril
    wrote on last edited by
    #1

    Hi,

    I am relatively new to QT and have come back to coding after a small (10 year) hiatus.... things have definitely changed since then.

    I am writing code to try and access a sqlite database and have run into a few snags. I can create the database and access it (including add tables etc) but have an issue with trying to locate where the database is saved. According to all the information I can source it should save in the same director that the application runs as I have set the db to a filename without a directory path.

    In trying to source the location I came across some code to set the directory through use of QFileDialog::getOpenFileName(.....);

    Unfortunately I can't get the include statement #include <QFileDialog> to work. When I use this include statement I get a file not found error from the compiler. (also tried #include <QTGui> as I found reference that if this is included then I do not need to specifically include QFileDialog)

    See code below (apologies in advance for the messy coding and lack of comments)
    @#include <QtGui/QGuiApplication>
    #include "qtquick2applicationviewer.h"
    #include "databasemanager.h"
    #include <QTextStream>
    #include <QFile>
    #include <iostream>
    #include <fstream>
    #include <sys/stat.h>
    #include <QDir>
    #include <QFileDialog>

    using namespace std;

    int main(int argc, char *argv[])
    {
    char *filename = "testdb.sqlite";
    DeviceData *displayDevice = new DeviceData();
    QString tableNames;
    QByteArray tableNameArray;
    const char *table;

    QString homedir(QDir::home().path());
    printf("home path is %s\n",homedir.toLocal8Bit().constData());
    
    //get the database file with QFileDialog
    QString fileName1 = QFileDialog::getOpenFileName(this,
     tr("Open Database"), "/home/yourhome", tr("SQLite Database Files (*.sqlite)"));
    
    FILE *fp = fopen&#40;filename, "r"&#41;;
    if(fp){
        printf("The file exists: %s\n",fp);
    
    }
    else printf("file does not exist\n");
    
    
    DataBaseManager *db = new DataBaseManager();
    bool isopen = db->opendb(*filename);
    if(isopen)printf("data base is open\n");
    else printf("database not open\n");
    
    //bool tableCreated =db->createDeviceTable();
    //if(tableCreated)printf("device table created!\n");
      //      else printf("device table failed to create");
    
    QStringList tableList = db->getDbTables();
    for(int i =0 ; i< tableList.length();i++)
    {
        printf("Table %i: %s\n",i,tableList.at(i).toLocal8Bit().constData());
    }
    
    db->getTable(1);
    QSqlError error = db->lasterror();
    if(error.isValid())
    {
        QString new_error = error.text();
        QByteArray ba = new_error.toLocal8Bit();
        const char *c = ba.data();
        printf("error:%s\n",c);
    }
    
    //QTextStream(stdout)<<devName;
    
    bool isclosed = db->closedb();
    if(isclosed)printf("database closed\n");
    else("database remains open!!\n");
    
    //QGuiApplication app(argc, argv);
    
    //QtQuick2ApplicationViewer viewer;
    //viewer.setMainQmlFile&#40;QStringLiteral("qml/homeControl/main.qml"&#41;);
    //viewer.showExpanded();
    
    //return app.exec();
    

    }@

    Any help would be appreciated!

    1 Reply Last reply
    0
    • p3c0P Offline
      p3c0P Offline
      p3c0
      Moderators
      wrote on last edited by
      #2

      Hi,

      I think you must write your code within
      @QGuiApplication app(argc, argv); @

      and
      @app.exec();@

      As QGuiApplication does all the initialization stuff.

      157

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dbzhang800
        wrote on last edited by
        #3

        QGuiApplication is not enough. QApplication must be used.

        and don't forget following line
        @
        QT += widgets
        @

        1 Reply Last reply
        0
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #4

          Am I correct that all the other includes like:
          @#include <QtGui/QGuiApplication>
          #include "qtquick2applicationviewer.h"
          #include "databasemanager.h"
          #include <QTextStream>
          #include <QFile>
          #include <iostream>
          #include <fstream>
          #include <sys/stat.h>
          #include <QDir>@

          do work correctly and only the last one:

          @#include <QFileDialog>
          @

          triggers the warning?

          In my opinion, this looks like a Qt setup problem. Are you sure that all include paths are set up correctly? Another issue might be the Qt version. The include file name has changed in version 4.0, before that it was "qfiledialog.h".

          1 Reply Last reply
          0
          • JeroentjehomeJ Offline
            JeroentjehomeJ Offline
            Jeroentjehome
            wrote on last edited by
            #5

            Hi,
            Everything that is depending on the EventHandler will not work! There might be parts of the Qt libs that do work. So QTextStream will probably work, it's only reading and writing to files etc, so that might be without Events.
            The dialogs/windows or any other kind of Widget shall not function!! These depend on the QApplication to be running.
            It is possible to run a Qt application without the QApplication, but then in basic it's a stand alone C++ program.
            So remember there MUST always be a QApplication or a QGuiApplication/QtCoreApplication running in your main!!

            Greetz, Jeroen

            1 Reply Last reply
            0
            • A Offline
              A Offline
              anduril
              wrote on last edited by
              #6

              Thanks guys,

              Makes sense regarding the QT Application or QApplications needing to be running. All other includes have worked without any issues so haven't really faced this problem until know.

              Probably need to reset to why I tried to use the QFileDialog in the first place. I still can't seem to find where QT is saving the sqlite database file when I create it. I can open the file, create tables, confirm that the tables are present, close the file and then re open it again at a later time and access the information. Yet I can't seem to find the file anywhere on my mac. IT's like it is being held in memory and not physically written to the hard drive??

              Is there any other way that I can get the file path for the database file to find it's location?

              1 Reply Last reply
              0
              • A Offline
                A Offline
                anduril
                wrote on last edited by
                #7

                Out of interest the suggestion by 1+1=2 worked to access the correct libraries. Inserting

                QT += widgets

                This has allowed me to include the QFileDialog

                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