在命令提示符下,进入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);
}