pdf转换成word软件-迅捷ocr文字识别软件
2023年4月4日发(作者:kindeditor)
在QT应用程序中使用win32的窗体
分类:windows编程QT2009-11-0709:13942人阅读评论(0)收藏举报
版权声明
请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原
始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。
首先要从QT的网站下载,然后从QWinHost
继承一个类
[cpp]viewplaincopyprint?
ostWindow:publicQWinHost
2.{
3.Q_OBJECT
:
ndow(QWidget*parent=0,Qt::WFlagsf=0)
6.:QWinHost(parent,f)
7.{
usPolicy(Qt::StrongFocus);
9.}
10.
eateWindow(HWNDparent,HINSTANCEinstance)
12.{
ATOMwindowClass=0;
(!windowClass)
15.{
SSEXwcex;
17.
=sizeof(WNDCLASSEX);
=CS_HREDRAW|CS_VREDRAW;
dProc=(WNDPROC)WndProc;
xtra=0;
xtra=0;
nce=instance;
=NULL;
r=LoadCursor(NULL,IDC_ARROW);
kground=(HBRUSH)(COLOR_WINDOW+1);
nuName=NULL;
assName=L"qtest";
m=NULL;
30.
Class=RegisterClassEx(&wcex);
32.}
33.
nd=CreateWindow((TCHAR*)windowClass,0,WS_CHILD
|WS_CLIPSIBLINGS|WS_TABSTOP,
_USEDEFAULT,0,CW_USEDEFAULT,0,parent,NULL,insta
nce,NULL);
hwnd;
37.}
38.
s:
ssage(constQString&msg,inttimeout);
41.
slots:
turnPressed()
44.{
geBox::information(topLevelWidget(),"MessagefromQt","R
eturnpressedinQLineEdit!");
46.}
47.
ted:
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)
50.{
t*widget=QWidget::find(GetParent(hWnd));
ndow*window=qobject_cast
53.
(window)switch(message)
55.{
56.
_LBUTTONDOWN:
->message("clicked",1000);
;
_SETFOCUS:
->message("SetFocusforWin32window!",1000);
;
_KILLFOCUS:
->message("KillFocusforWin32window!",1000);
;
_MOUSEMOVE:
->message("Movingthemouse,aren'twe?",200);
;
_KEYDOWN:
(wParam!=VK_TAB)
->message("KeyPressed!",500);
;
t:
DefWindowProc(hWnd,message,wParam,lParam);
75.}
0;
77.}
78.};
解释一下上面的HostWindow类,
ndow类继承了QWinHost并且实现了在QWinHost中定义的虚
函数createWindow(),createWindow()调用API函数RegisterClassEx注册窗口
类。然后再调用Windows的API函数CreateWindow来创建窗口。
2.下面的signals和slots都很简单。singals是给status发出显示信息的信号;slots
是QLineEdit的确认信息。
c函数也很简单,是RegisterClassEx的回调函数。用来处理windows
消息的。
注意:
由于WndProc是static的,所以我们可以使用QWidget::find来将HWND
转换为QWidget。
处理消息的时候要使用QWinHost所以我们通过
qobject_cast
下面是调用方法:
[cpp]viewplaincopyprint?
1.#include""
2.
n(intargc,char**argv)
4.{
cationa(argc,argv);
6.
indowmw;
r()->addMenu("&File")->addAction("&Exit",&a,SLOT(quit()));
9.
tcentral(&mw);
11.
ditedit(¢ral);
ndowhost(¢ral);
t::connect(&host,SIGNAL(message(constQString&,int)),
atusBar(),SLOT(showMessage(constQString&,int)));
t::connect(&edit,SIGNAL(returnPressed()),&host,SLOT(return
Pressed()));
16.
ayoutvbox(¢ral);
get(&edit);
get(&host);
20.
tralWidget(¢ral);
();
();
24.}
大家要注意一点:
我们的class在.cpp文件中实现的时候,并且包含Q_OBJECT宏的时候。
我们在使用的时候要#include""
包含.moc文件。因为.moc文件是moc将Q_OBJECT宏展开后的结果。如果
我们直接编译的话,编译器是不认识
Q_OBJECT宏的。
更多推荐
win32应用程序
发布评论