mfc和qt混合编程

老灰狼 2014-08-19 11:05:27
刚接触qt,
刚刚试了下混合编程,有些不明之处;
我用vs2012创建了一个mfc对话框应用程序,
包含头文件
#include "QtWidgets/QApplication"
#include "QtWidgets/QMessageBox"
#include "QtCore/QString.h"
加入依赖库lib
#pragma comment(lib,"Qt5Core.lib")
#pragma comment(lib,"Qt5Widgets.lib")

然后在对话框上添加一个按钮
接着在按钮响应函数中添加一行代码:
QMessageBox::information(0,QObject::tr(""),QObject::tr(""),0);
在编译完成后,链接时会报错误;
MfcUseQtDllDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ),该符号在函数 "public: void __thiscall CMfcUseQtDllDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMfcUseQtDllDlg@@QAEXXZ) 中被引用

1>MfcUseQtDllDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static class QString __cdecl QObject::tr(char const *,char const *,int)" (__imp_?tr@QObject@@SA?AVQString@@PBD0H@Z),该符号在函数 "public: void __thiscall CMfcUseQtDllDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMfcUseQtDllDlg@@QAEXXZ) 中被引用

1>MfcUseQtDllDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static int __cdecl QMessageBox::information(class QWidget *,class QString const &,class QString const &,int,int,int)" (__imp_?information@QMessageBox@@SAHPAVQWidget@@ABVQString@@1HHH@Z),该符号在函数 "public: void __thiscall CMfcUseQtDllDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CMfcUseQtDllDlg@@QAEXXZ) 中被引用

3 个无法解析的外部命令



根据mfc的经验 这应该是少一些lib导致的吧? 但是qt帮助文档中并没有提及这些信息,希望有经验的老师提示一下
...全文
813 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sichuanwww 2017-04-05
  • 打赏
  • 举报
回复
Windows上 MFC就够了吧
muradil1988 2015-03-01
  • 打赏
  • 举报
回复
楼主解决问题了吗? 怎么解决了!!! 我也是同样的问题
Alex_Lian 2014-08-28
  • 打赏
  • 举报
回复
混用是不好的,没必要
vcf_reader 2014-08-23
  • 打赏
  • 举报
回复
这样混用,小程序没什么问题。若是一个很大的工程,可能到最后会收不了场
彩阳 2014-08-20
  • 打赏
  • 举报
回复
我也这么认为。你这个只需要一点Qt的功能,要么就完全用MFC做。即使你编译连接成功了,那么Qt加上MFC的链接库将会变得无比的庞大。
老灰狼 2014-08-19
  • 打赏
  • 举报
回复
引用 3 楼 u011836122 的回复:
[quote=引用 2 楼 qqfeng0908 的回复:] [quote=引用 1 楼 u011836122 的回复:] 你有添加Q_OBJECT宏吗?没有添加可是不行的。 Qt不能这么直接用。Qt的moc元对象编译器你不知道吗? Qt Visual Studio Add-in你没有吗?
一语惊醒梦中人,三个雷给我劈醒了不少 但还是有点疑问, Q_OBJECT不是用在QT的派生类中吗?我这里并没有任何派生自QT的类, 只是调用了QMessageBox的静态函数 这样moc也就不会参与进来 第三个那个addin曾经看了下,以为是在vs中完全使用qt编程的组建[/quote] 去把Add-in安上。配置好。新建个Qt工程。 包含windows.h就能用Windows API了。 什么叫moc不会参与?去找本书看看。去看文档。 (你用的是静态库?不是官网下载的吗?) [/quote] 工程还是MFC的,只是要用QT的东西
漫舞云中影 2014-08-19
  • 打赏
  • 举报
回复
引用 2 楼 qqfeng0908 的回复:
[quote=引用 1 楼 u011836122 的回复:] 你有添加Q_OBJECT宏吗?没有添加可是不行的。 Qt不能这么直接用。Qt的moc元对象编译器你不知道吗? Qt Visual Studio Add-in你没有吗?
一语惊醒梦中人,三个雷给我劈醒了不少 但还是有点疑问, Q_OBJECT不是用在QT的派生类中吗?我这里并没有任何派生自QT的类, 只是调用了QMessageBox的静态函数 这样moc也就不会参与进来 第三个那个addin曾经看了下,以为是在vs中完全使用qt编程的组建[/quote] 去把Add-in安上。配置好。新建个Qt工程。 包含windows.h就能用Windows API了。 什么叫moc不会参与?去找本书看看。去看文档。 (你用的是静态库?不是官网下载的吗?)
老灰狼 2014-08-19
  • 打赏
  • 举报
回复
引用 1 楼 u011836122 的回复:
你有添加Q_OBJECT宏吗?没有添加可是不行的。 Qt不能这么直接用。Qt的moc元对象编译器你不知道吗? Qt Visual Studio Add-in你没有吗?
一语惊醒梦中人,三个雷给我劈醒了不少 但还是有点疑问, Q_OBJECT不是用在QT的派生类中吗?我这里并没有任何派生自QT的类, 只是调用了QMessageBox的静态函数 这样moc也就不会参与进来 第三个那个addin曾经看了下,以为是在vs中完全使用qt编程的组建
漫舞云中影 2014-08-19
  • 打赏
  • 举报
回复
你有添加Q_OBJECT宏吗?没有添加可是不行的。 Qt不能这么直接用。Qt的moc元对象编译器你不知道吗? Qt Visual Studio Add-in你没有吗?
乔巴好萌 2014-08-19
  • 打赏
  • 举报
回复
你说的这个功能够呛吧 Qt中所有的事件都是基于QApplication:exec路由的 而这个一般是主线程 如果你的MFC另外有一个Main入口 应该是不行的

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧