2011-07-27 167 views
1

我想在Qt中創建一個SQLite數據庫。這是我的代碼:在Qt中創建SQLite數據庫(C++)

但是,它不起作用。這是我收到的輸出:

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabase17defaultConnectionE'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabase11addDatabaseERK7QStringS2_'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:8: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:9: error: undefined reference to `imp__ZN12QSqlDatabase15setDatabaseNameERK7QString'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:11: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

C:\Users\Tanner\qt\sqltest-build-desktop..\sqltest\main.cpp:11: error: undefined reference to `imp__ZN12QSqlDatabaseD1Ev'

:-1: error: collect2: ld returned 1 exit status

我敢肯定,我做錯了什麼,因爲這是我第一次嘗試在C++/Qt的數據庫工作。非常感謝創建數據庫的任何幫助!我在文件路徑中添加了一個額外的斜槓,因爲編譯器不停地抱怨字符轉義。額外的斜線可以與它有什麼關係?如果是這樣,我怎麼能沒有它認爲我試圖逃避下一個字符進入路徑。

+0

這是一個鏈接器錯誤,而不是編譯器錯誤。確保你鏈接到sqlite庫。 –

+1

什麼是鏈接器設置?你鏈接到QtSql庫嗎? – Bart

+0

不,我不知道。我怎樣才能做到這一點?巴特,我試圖學習如何使用SQLite作爲您對我最後一個問題的答案的建議,但我一直沒能找到很多文檔。我如何鏈接到SQLite庫? –

回答

7

沒有得到它的工作後,我與Qt的社區論壇檢查,一切似乎我缺少的是

QT += sql

在.pro文件

這裏

在論壇上發帖:http://developer.qt.nokia.com/forums/viewthread/8262/

+0

謝謝,這對我有幫助。當我試圖創建Qt數據庫時,我從鏈接器中得到了一些錯誤,並且我猜如何解決它們都是失敗的,直到我在你的問題上做了標記,有趣的是注意到在.pro中包含聲明的要求在Qt文檔中沒有給出。我與QtNetwork也有類似的情況,QtNetwork也應該包含在.pro中,但是這在文檔中提到過 –

3

您看到的錯誤不是編譯器錯誤,而是鏈接器錯誤。錯誤本身與SQLite無關,但與Qt相關。你很可能不會鏈接到QtSql4.lib(4可能是不同的版本號)。這樣做很可能會使您看到的錯誤消失。

作爲對您的評論/問題的回答,您不(在您的應用程序級別)不必擔心SQLite。由於您使用Qt的SQL功能,Qt將會處理(和「隱藏」)這些內容。 Qt使用所謂的database drivers,它基本上是根據您在代碼中指定的內容加載的插件。所以你的情況是一個SQLite驅動程序。

如果在安裝Qt時尚未創建此驅動程序,則可能需要自行構建它。您可以按照我在上面提供的鏈接中找到的說明進行操作。

P.s.你已經正確處理了「字符轉義」問題。這不是你目前問題的原因。

+0

我似乎沒有「%QTDIR%\ src \ plugins \ sqldrivers \ sqlite」我的電腦上的文件夾。命令提示符找不到%QTDIR%,並且如果我轉到QT位於我的計算機上的文件夾,則不存在「src」文件夾。 –

+0

%QTDIR%指的是環境變量QTDIR。這個變量通常指向你已經安裝Qt的地方。 (你可能必須自己創建這個變量,我似乎記得我做過)。你有沒有安裝二進制發行版?我個人總是從源代碼構建Qt,所以我不知道二進制發行版是什麼樣的,但它可以解釋爲什麼你沒有src文件夾。 – Bart

+0

是的,我在QT的網站上從二進制文件安裝了它。 –