在命令提示符下,进入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);
}
本文详细解析了Qt程序入口与Windows程序入口之间的区别,从窗口注册、消息处理到消息循环,深入探讨了Qt如何实现跨平台程序开发。通过对比WinMain与main函数的调用过程,揭示了Qt在创建Windows窗口时的独特步骤。
649

被折叠的 条评论
为什么被折叠?



