1_Qt简介.md
QT简介
QT是c++的一个应用程序框架。包含大量GUI库,其他库等。
跨平台GUI实现方法:
- API 映射:API 映射是说,界面库使用同一套 API,将其映射到不同的底层平台上面。大体相当于将不同平台的 API 提取公共部分。
- API 模拟:前面提到,API 映射会“缺失”不同平台的特定功能,而 API 模拟则是解决。这一问题。不同平台的有差异 API,将使用工具库自己的代码用于模拟出来。
- GUI 模拟:任何平台都提供了图形绘制函数,例如画点、画线、画面等。有些工具库利用这些基本函数,在不同绘制出自己的组件,这就是 GUI 模拟。GUI 模拟的工作量无疑是很大的,因为需要使用最基本的绘图函数将所有组件画出来;并且这种绘制很难保证和原生组件一模一样。
QT环境搭建
- Qt SDK:包含了 Qt 库以及 Qt 的开发工具(IDE、i18n 等工具),是一套完整的开发环境。
- Qt Library:仅包含 Qt 库。
- Qt Creator:基于 Qt 构建的一个轻量级 IDE。
hello world
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel label("hello world");
label.show();
return a.exec();
}
引入的是QApplication以及QLabel这两个类。对于 Qt 程序来说,main()函数
一般以创建 application 对象(GUI 程序是 QApplication,非 GUI 程序是
QCoreApplication。QApplication 实际上是 QCoreApplication 的子类。)开始,后面才是实际业务的代码。main()函数最后,调用 app.exec(),开启事件循环。
注意:以下代码不推荐
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// QLabel label("hello world");
QLabel *label = new QLabel("Hello World!");
label->show();
// MainWindow w;
// w.show();
return a.exec();
}
首先,按照标准 C++ 来看这段程序。这里存在着内存泄露。当 exec()退出时(也就是事件循环结束的时候。窗口关闭,事件循环就会结束),label 是没办法 delete 的。这就造成了内存泄露。当然,由于程序结束,操作系统会负责回收内存,所以这个问题不会很严重。即便你这样修改了代码再运行,也不会有任何错误