Qt客户端入门(一)

假设你至少看过21天学会c++这样的书籍,有一定的基础。

先来看下我们一般最先接触的qt客户端程序,main.cpp大致如下:

#include "panda_client.h"
#include 

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	panda_client w;
	w.show();
	return a.exec();
}

其中,panda_client一般是继承QMainWindow的一个窗口类,头文件大致如下:

#pragma once

#include 
#include "ui_panda_client.h"

class panda_client : public QMainWindow
{
	Q_OBJECT

public:
	panda_client(QWidget *parent = Q_NULLPTR);

private:
	Ui::panda_clientClass ui;
};

其中Ui::panda_clientClass ui,即是qt的设计师生成的界面,在构造函数内使用setUi函数即可使用该设计师设计的界面,这是qt为了方便界面设计而使用的机制,cpp代码很简单:

#include "panda_client.h"

panda_client::panda_client(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
}

相信学习qt的玩家第一次接触的大概都是这样。而qt的核心机制其实就体现在这个简单的main函数里了。

创建QApplication a,参数引用main函数参数。然后调用a.exec();进入qt的事件循环机制,直至退出,该函数就返回一个int值,main函数结束。main函数结束,自然该程序也就结束了。因此,qt的机制也就在这个exec函数里面了,也就是他的事件机制。

想一想,如果我们不用qt而纯c++写一个长时间运行的应用程序,无非也就是在main函数里执行一个循环(一般while循环),在每帧循环里,处理当前循环内该处理的事,直到循环判断结束条件满足时,跳出循环,main函数执行完毕,程序结束。常见的window应用程序运行时,用伪代码表示大致如下:

int main(int argc, char *argv[])
{
	读取一些配置文档什么的
    创建一个应用程序的实例,载入配置什么的
    while(判断是否满足循环结束)
    {
        鼠标动了吗,如果动了,谁表示要处理鼠标事件,把鼠标的情况告诉谁,让他处理
        键盘动了吗。。。
        是否有windows任务给我呢。。
        是否让我退出呢
        是否xxx
        。。。 
        睡了睡了,休息n毫秒,迎接等待第二天的事情(下一个循环)
    }
    循环结束,程序的一生也该结束了,交待后事
    交卷(return XX)
}

如果是win32编程,程序的房梁也大概如此,每一天要做些什么,自己填充即可(用vs创建win32应用程序即可见)。其实仔细想想,很多很多很多(一个例子我也举不出啊)程序基础运行架构,都是这样的。比如windows就是所谓的消息机制,将每一天(每个循环)发生的事情收集起来(鼠标事件、键盘事件等),归类,然后广而告之。需要的程序(告诉系统我需要,也就是所谓的订阅,告诉系统调用X函数通知,也就是所谓的注册)就会接收到订阅的事件,然后各自处理。

事件机制也好,消息机制也罢。作用就是广而告之,让相关的知道,各取所需。所以,我们大致也可猜测到,a.exec(),函数里大致至少会干些什么。轮子咱们最好不要再造,个人觉得意义不是很大。实在想知道,打开她的源码瞧一瞧,书读百遍,其意自现是不?

你可能感兴趣的:(Qt)