3、在 BOOL CTestApp::InitInstance() 函数中增加一行代码:
QMfcApp::instance(this);
跟踪到QMfcApp的代码中可以清楚的看到该静态函数的功能是创建QApplication实例。
第三步:
重写CTestApp的run方法——在头文件中添加virtual int run();
cpp中的函数如下:
int CTestApp::Run()
{
int result = QMfcApp::run(this);
delete qApp;
return result;
}
注——QT帮助介绍:
QMfcApp:run()
will then use that QMfcApp::instance, which must then be deleted explicitly using the global qApp pointer.
在testDlg.h文件中添加定义——注意添加Qt的头文件:
QWinWidget *widget;
1、在工程中右击——类向导——类名要对应到testDialog这个类——到左下面的消息tab框——双击分别选中WM_CREATE和WM_DESTORY——确定
2、在CTestDialog的OnCreate函数中加入下面代码:
widget = new QWinWidget( this );
QHBoxLayout *hbox = new QHBoxLayout( widget );
QLabel *label = new QLabel( "Enter text:", widget );
QLineEdit *edit = new QLineEdit( widget );
hbox->addWidget( label );
hbox->addWidget( edit );
widget->move( 0, 0 );
widget->show();
注:记得加上对应的头文件或Qt声明:
#include "qwinwidget.h"
#include <QtGui/QHBoxLayout>
#include <QtGui/QLineEdit>
#include <QtGui/QLabel>
#include <QtGui/QSpinBox>
3. 在 CTestDialog 的 OnDestroy 方法中添加下面代码:
delete widget;
widget = 0;
添加Qt的inlcude LIB文件路径到工程的属性表中,这个分别在C/C++和链接器中添加,再在连接器——输入中添加.lib文件
如果仅做上述操作就编译的话,肯定编译不过。会报出一些链接错误
编译运行,则出现如下错误:
错误 1 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall Widget::metaObject(void)const " (?metaObject@Widget@@UBEPBUQMetaObject@@XZ)
错误 2 error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall Widget::qt_metacast(char const *)" (?qt_metacast@Widget@@UAEPAXPBD@Z)
错误 3 error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall Widget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Widget@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
错误 4 fatal error LNK1120: 3 个无法解析的外部命令
这是因为在源文件中没有添加上moc_qwinhost.cpp文件。
解决方法:右击hello.h,选择“自定义生成步骤”,“常规”
命令行:moc.exe .h -o moc_qwinhost.cpp
输出:moc_qwinhost.cpp
附加依赖项:moc.exe qwinhost.h
确定,然后,右击qwinhost.h,选择 “编译”,则在文件夹中生成moc_qwinhost.cpp,再将其添加到源文件中。
重复上述过程编译qwinwidget.h文件,得到moc_qwinwidget.cpp文件。工程中只需要编译这两个moc文件就可以了。
注:如果VS编译器暂时不能编译的话,可以到Qt安装文件夹下的bin文件夹中,找到moc.exe,利用cmd命令行编译这两个头文件,编译出来的文件添加到工程中即可。
错误2:
然后,运行程序,出现错误:
错误 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?
对于上述的第二个错误可以直接在项目属性--》C/C++--》预编译头--》创建/使用预编译头改为“不使用预编译头”。这样编译就通过了。
F5运行。
《MFC&Qt混合编程》 part1 MFC对话框中嵌入Qt窗口控件1、环境配置:VS2010,Qt4.8.4_win64,Qt_VS_Addin_1.1.112、创建的MFC对话框程序3、输出为x64的debug&release程序准备工作:下载QtMigration文件http://download.csdn.net/download/power_YQ/
操作系统:win10
嵌入
的原因
使用某公司提供的数据采集相关的动态链接库,但该链接库在VS下可正常运行,而在
Qt
下却无法运行。苦于项目申请书
中
已经说明,该项目的软件需使用
Qt
进行开发,不得已才出此下策。在VS下使用
MFC
调用动态连接库进行数据的采集,将
MFC
的界面进行打包后使用
Qt
调用,并
MFC
的界面
嵌入
到
Qt
中
,实现应有功能。
1、将
MFC
编译的exe即相关的动态链接库文件复制到
Qt
编译的工程目录下。
2、确定
MFC
文件的
窗口
的相关信息。打开VS
1.运行
Qt
窗口
进程,查找外部
窗口
句柄 (FindWindow 、 FindWindowEx 等)
2.设置父
窗口
SetParent
3.移动
窗口
MoveWindow、SetWindowPos
4.如果需要去掉
Qt
窗口
的标题栏,可以修改
窗口
样式 SetWindowLong
5.在你自己
窗口
的OnMove、OnSize等消息里,再次移动外部
窗口
暂时讲解
qt
控件
以DLL形式附加到win32/
mfc
程序
中
环境 vs2005集成
qt
编译环境+
qt
4.5
1.使用
QT
提供的两者的交互框架http://download.csdn.net/source/3539936
2.创建
QT
DLL
2.将src 的.h .cpp
最近本猿搞一个
MFC
和
QT
混合
编程
的东西,经常出现这样的错误:
:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/ATL
MFC
/INCLUDE/atlbase.(3210): Parse error at "__identifier"
查了一下,发现网上信息很少,而且很多人说
MFC
和
QT
没法
混合
。其实他们两是可以一起玩的。所谓实践出真知...
在用
Qt
做客户端时,如果项目突然需要用到一些COM,
MFC
dll等,这些玩意儿在
Qt
可能无法调用,又不想用
MFC
做界面,那么是否可以
Qt
,
MFC
一起使用呢?
这种解决方案是存在的,
Qt
是一套界面库,把
Qt
当做一套常规的SDK, 在
MFC
项目
中
包含
Qt
的头文件,lib,dll,这样就可以把
Qt
嵌套在
MFC
中
使用,问题又来了,
MFC
有自己的消息映射机制,
Qt
有自己的...
支持
Qt
5的
qt
winmigrate,下载地址:https://github.com/
qt
project/
qt
-solutions
需要用到其
中
的q
mfc
app.h q
mfc
app.cpp qwinwidget.h qwinwidget.cpp等文件
Qt
Add-in插件
VS新建一个
MFC
工程,然后卸载项目,右击编辑***.vcxproj工程文件
找到以下配置处,添加Keyword字段
Qt
4VSv1.0,可以新建一个
QT
工程打开看看值是多少
<PropertyGroup Label.