HelloQT

本文详细解析了Qt程序入口与Windows程序入口之间的区别,从窗口注册、消息处理到消息循环,深入探讨了Qt如何实现跨平台程序开发。通过对比WinMain与main函数的调用过程,揭示了Qt在创建Windows窗口时的独特步骤。

在命令提示符下,进入hello目录,输入如下命令,生成一个与平台无关的项目文件hellor.pro

Qmake -project

再通过hello.pro文件创建一个Visual Studio的工程文件

Qmake -tp vc hello.pro

即可编译hello程序

代码如下

#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello Qt!");
    label->show();
    return app.exec();
}


比MFC直接多了。

Win32程序的入口是WinMain,这里却是main.这是怎么回事?

F11,单步跟踪程序。程序首先进入qtmain_win.cpp中的WinMain函数中。


在这个WinMain函数内部调用了我们现实的main函数。

qt中创建windows窗口的主要步骤

(1)窗口注册函数,创建窗口函数

在qt_reg_winclass函数中,调用了窗口注册函数API,并调用了创建窗口API调用顺序如下。

QWidget::setVisible

QWidget::create

QWidgetPrivate::create_sys

{

//......

qt_reg_winclass()

//......

 id = CreateWindowEx

//......

}

qt_reg_winclass()

{

//......

WNDCLASS wc;

//......

ATOM atom = RegisterClass(&wc);

}

(2)窗口消息处理函数

窗口消息处理函数是在qapplication_win.cpp中的QtWndProc共1000多行代码。

(3)消息循环

在QEventDispatcherWin32::processEvents中实现了消息的分发。

调用函数顺序如下

return app.exec();

int QEventLoop::exec(ProcessEventsFlags flags)

{

        while (!d->exit)

            processEvents(flags | WaitForMoreEvents | EventLoopExec);

}

QEventDispatcherWin32::processEvents(

//......

haveMessage = PeekMessage(&msg, 0, 0, 0, PM_REMOVE);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值