Loading

1_Qt简介.md

QT简介

QT是c++的一个应用程序框架。包含大量GUI库,其他库等。

跨平台GUI实现方法:

  • API 映射:API 映射是说,界面库使用同一套 API,将其映射到不同的底层平台上面。大体相当于将不同平台的 API 提取公共部分。
  • API 模拟:前面提到,API 映射会“缺失”不同平台的特定功能,而 API 模拟则是解决。这一问题。不同平台的有差异 API,将使用工具库自己的代码用于模拟出来。
  • GUI 模拟:任何平台都提供了图形绘制函数,例如画点、画线、画面等。有些工具库利用这些基本函数,在不同绘制出自己的组件,这就是 GUI 模拟。GUI 模拟的工作量无疑是很大的,因为需要使用最基本的绘图函数将所有组件画出来;并且这种绘制很难保证和原生组件一模一样。

QT环境搭建

  1. Qt SDK:包含了 Qt 库以及 Qt 的开发工具(IDE、i18n 等工具),是一套完整的开发环境。
  2. Qt Library:仅包含 Qt 库。
  3. 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 的。这就造成了内存泄露。当然,由于程序结束,操作系统会负责回收内存,所以这个问题不会很严重。即便你这样修改了代码再运行,也不会有任何错误

posted @ 2022-05-27 14:11  nsfoxer  阅读(38)  评论(0编辑  收藏  举报