我試圖運行我的Qt應用程序時似乎遇到運行時錯誤。在發佈文件夾中運行的Qt可執行文件 - Program Files(x86)中的運行時錯誤
我能夠在發佈模式下成功構建我的應用程序,它運行得很好,坐在版本文件夾中。但是,這並不是用戶安裝它時所處的位置。我需要它運行在C:/Program Files (x86)/ApplicationName/application.exe
。
所以我把應用程序移到了那裏。我最近爲應用程序添加了一些SQLite
功能。所以我期望得到某種丟失的DLL文件錯誤。我做到了。所以我找到了正確的dll文件(Qt5Sql.dll
)並將其移動到該目錄中。現在我得到一個運行時錯誤。
要找出導致此運行時錯誤的原因,我引入了一堆QMessageBox::warning
s來查看它何時出現錯誤。錯誤正在引起這行代碼:
sqlite = new SQLite(QString("%1%2").arg(myDocuments).arg(SQLite::DATABASE_NAME));
我檢查,以確保我正在從QString("%1%2").arg(myDocuments).arg(SQLite::DATABASE_NAME)
預期QString
和我。
這裏是它們的構造看起來像sqlite.cpp
:
SQLite::SQLite(const QString& path)
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName(path);
if (!database.open())
{
QMessageBox::warning(NULL, "Error", "Failed to open database.");
}
}
的奇怪的事情是,我知道我還沒有進入這個構造,因爲我在構造函數和我的第一行之前把QMessageBox::warning
在運行時錯誤之前沒有看到。不過,我在構造函數之前直接看到QMessageBox::warning
。
任何人都知道可能會導致這種情況?
編輯:
我相信我是缺少sqldriver
文件夾,其中包括qsqlite.dll
。我將該文件夾添加到我的exe
文件所在的位置,但仍然出現運行時錯誤。我增加了以下我的代碼調試目的:
QStringList drivers = QSqlDatabase::drivers();
QString ds;
int len = drivers.length();
for (int x = 0; x < len; x++)
{
ds.append(QString("%1\n").arg(drivers[x]));
}
QMessageBox::warning(this, "DRIVERS", ds);
sqlite = new SQLite(QString("%1%2").arg(myDocuments).arg(SQLite::DATABASE_NAME));
的QMessageBox
顯示:
QSQLITE
QODBC
QODBC3
QPSQL
QPSQL7
後,我在對話框上單擊OK,但我仍然得到的運行時錯誤。儘管QSQLITE
司機顯然是可用的,我得到的這行代碼的運行時錯誤:
QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
'Qt5Sql.dll'是通用的sql庫。您仍然需要路徑中的sqlite插件庫。這在運行時解決。不確定路徑,它在哪裏搜索。 – UldisK
我在想我可能會特別需要類似於sqlite的東西。但是,這到底是什麼?我沒有看到任何'Qt5Sqlite.dll'或類似的東西。 –
您需要在'application.exe'附近放置' \ plugins'的'sqldrivers'文件夾。這是所有插件的通常規則。 –