浅谈VC中使用Qt库之三

来源:互联网 发布:最全钢琴谱 mac 编辑:程序博客网 时间:2024/06/14 09:47

前面我们讲到在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去实现。

0 0