1

私のアプリケーションでは、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 を使用しています。

4

2 に答える 2

0

データベース ドライバは実行時にロードされます。db-driver パスが正しくない場合、コンパイル プロセス中にデータベース構成関連のエラーは発生しません。Qt がインストールされているマシンでビルドするため、パスが間違っていることはありません。

Windows では、exe が plugins\sqldrivers 内のファイルにアクセスできない場合に、これが頻繁に発生します。MAC上にLinuxの「strace」のようなものはありますか? はいの場合、exeがドライバープラグインを見つけようとするパスを追跡できます。

私は常にインストーラーのプラグイン ディレクトリ全体をコピーし、実行可能ファイルのルート ディレクトリに展開します (例: C:\Program Files (x86)\\plugins)。

それが役に立てば幸い。

于 2014-10-02T12:07:32.517 に答える
0

out of memory次のコードを実行して、エラーを修正できました。

#ifdef Q_OS_MAC
    QString databaseName = QApplication::applicationDirPath().append("/").append(DATABASE_NAME);
    mDB.setDatabaseName(databaseName);
#endif
于 2014-10-06T11:01:10.447 に答える