使用macdeployqt构建Qt应用程序时Qt应用程序无法正常工作

时间:2014-10-02 07:52:22

标签: mysql macos qt macdeployqt

在我的应用程序中,我使用QSqlDatabase来存储一些信息。我使用以下命令成功构建了它(即使verbose=3也没有错误):

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

在此之前我使用端口

成功安装了mysql55
sudo port install 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

2 个答案:

答案 0 :(得分:0)

数据库驱动程序在运行时加载。如果数据库驱动程序路径不正确,那么在编译过程中,您将无法获得任何与数据库配置相关的错误。不正确。 路径&#39;当你在安装了Qt的机器上构建时,甚至可能不正确。

在Windows上,当exe无法访问plugins \ sqldrivers中的文件时,通常会发生这种情况。 有没有像Linux&#39; strace&#39;在MAC?如果是,您可以跟踪您的exe尝试查找驱动程序插件的路径。

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

希望它有所帮助。

答案 1 :(得分:0)

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

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