1. 程式人生 > >淺談VC中使用Qt庫之三

淺談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去實現。