淺談VC中使用Qt庫之三
前面我們講到在VC中直接使用Qt,這種方法將Qt和VC程式碼混在一起,感覺不倫不類,更好的方法是將這些介面封裝在庫中,vc通過載入dll的方式來使用。
1.首先建立一個win32 專案-》選擇動態庫-》完成
將前面工程的EdbParamaUi.h EdbParamaUi.cpp moc_EdbParamaUi.cpp拷貝到該工程中並加入工程。
2. 編寫匯出函式
編譯執行生成庫。
3.測試工程我們使用前面的幾節的工程修改程式碼如下:
oid CMFCApplication4Dlg::OnBnClickedButton1()
{
// TODO: 在此新增控制元件通知處理程式程式碼
//QMessageBox::information(NULL, QStringLiteral("這是Qt訊息框"), QStringLiteral("這是Qt訊息框"));
//這裡測試我給的絕對路徑
HMODULE mod = LoadLibrary(_T("E:/work/QuotationExcelUi/Debug/QuotationExcelUi.dll"));
//這個是測試Qt生成的Dll的部分,先動態載入,再使用匯出的函式
if (mod)
{
typedef void(*pShowDialog)(HWND parent);
pShowDialog showDialog = (pShowDialog)GetProcAddress(mod, "ShowEdbParamaUi");
if (showDialog)
showDialog(NULL);
FreeLibrary(mod);
}
}
然後將先前新增的Qt程式碼都登出(因為一個程序只能有一個QApplication物件)
4.執行該工程
出現找不到QtCore.dll檔案。
我們將Qt安裝目錄下bin目錄下的所有檔案拷貝到這個工程的exe檔案的目錄。
再次執行 點選按鈕
·
成功
但是這裡需要將Qt的庫拷貝奧目錄 要是有多個exe掉用這個dll 每個exe都得帶上一份Qt庫,這顯然不符合正常邏輯, 解決辦法將Qt 庫目錄新增到環境變數中:
重啟vs 並刪掉 該目錄的Qt 庫 重新執行發現成功運行了。
自此這2種方法應該可以滿足一般的開發需要了,至於要在Qt使用MFC 思路也基本一致,如果你的Qt版本在5.0以下建議使用qtwinmigrate-2.8_1去實現。