pdf转换成word软件-迅捷ocr文字识别软件

win32应用程序
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(widget);

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将QWidget转换为HostWindow。

下面是调用方法:

[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应用程序