2014-10-02 34 views
1

在我的应用程序中,我使用QSqlDatabase来存储一些信息。我用下面的命令成功构建了它(没有任何错误,即使verbose=3):使用QSqlDatabase Qt应用程序在使用macdeployqt构建时无法正常工作

macdeployqt AppName.app/ -dmg -qmldir=~/dev/AppName/qml 

,我使用端口

sudo port install mysql55 

如果我尝试运行我的应用程序也不会崩溃成功安装mysql55之前,但它也不涉及数据库访问。

这是我打开数据库等代码:

#include <QSqlQuery> 
#include <QSqlDriver> 

const QString DATABASE_NAME = "com.company.program.db"; 

MyClass::MyClass(QObject *parent) : QObject(parent) { 
    mDB = QSqlDatabase::addDatabase("QSQLITE"); 

    #ifdef Q_OS_LINUX 
    QString path(QDir::home().path()); 
    path.append(QDir::separator()).append(DATABASE_NAME); 
    path = QDir::toNativeSeparators(path); 
    mDB.setDatabaseName(path);   // NOTE: We have to store database file into user home folder in Linux 
    #else 
    mDB.setDatabaseName(DATABASE_NAME); // NOTE: File exists in the application private folder, in Symbian Qt implementation 
    #endif 

    bool notOpened = !mDB.open(); 

    QMessageBox::critical(0, "MyClass", mDB.lastError().databaseText()); // always is 'out of memory' 

    if (notOpened) emit failedToOpen(); 
    else { 
     // some initialization 
    } 
} 

MyClass::~MyClass() { 
    mDB.close(); 
} 

任何人都经历了这样一个相同的问题/修复?

注:我使用的是Mac OS X 10.9和Qt5.3.2

+0

开后失败,尝试获取,并通过调用mDB-> lastError()检查错误信息 - > databaseText() – 2014-10-02 08:46:22

+0

奇怪事情是它不会发出信号'failedToOpen' – Niklas 2014-10-02 09:18:13

+0

在代码 – 2014-10-02 09:20:10

回答

0

我设法通过执行这个代码修复out of memory错误:

#ifdef Q_OS_MAC 
    QString databaseName = QApplication::applicationDirPath().append("/").append(DATABASE_NAME); 
    mDB.setDatabaseName(databaseName); 
#endif 
0

驱动程序在运行时加载数据库。如果db-driver路径不正确,你将不会在编译过程中得到任何与数据库配置相关的错误。 当你在安装了Qt的机器上构建时,路径'甚至不可能不正确。

在Windows上,这经常发生,当exe无法访问插件\ sqldrivers中的文件。 在MAC上有没有像Linux的'strace'?如果是的话,你可以追踪你的exe试图找到驱动程序插件的路径。

我总是将整个插件目录复制到安装程序中,并将其部署到可执行文件的根目录中,例如C:\ Program Files(x86)\\ plugins

希望它有帮助。

+0

我在OS X上,macdeployqt正在做所有的事情,像复制正确的目录;) – Niklas 2014-10-02 12:12:29

相关问题