现在的位置: 首页 > 综合 > 正文

HelloQT

2018年02月16日 ⁄ 综合 ⁄ 共 1085字 ⁄ 字号 评论关闭

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

}

【上篇】
【下篇】

抱歉!评论已关闭.