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 的。这就造成了内存泄露。当然,由于程序结束,操作系统会负责回收内存,所以这个问题不会很严重。即便你这样修改了代码再运行,也不会有任何错误
本文作者:nsfoxer's blog
本文链接:https://www.cnblogs.com/nsfoxer/p/16317448.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步