Qt是什么?
Qt是一个跨平台应用开发框架。
Qt既包括了一系列的Qt库,还包括诸多配套的开发工具如QtCreater,GUI Designer。Qt本身是由C++开发的,但是也提供了其他编程语言的接口。
Qt的定位以及同类
学一种技术,最重要的是找到这个技术在计算机中的定位,这样才能更好地把技术融入到自己的技术栈中,否则就会学一门忘一门。还要找打这门技术所在定位的同类,否则只会局限于这门技术本身,无法扩展,也无法从API中抽身出来真正理解这个定位的技术所需要的共通性的知识以及设计方案。
Qt的定位是一个跨平台的GUI开发框架。
所谓GUI开发,主要工作就是:
- 响应用户操作。
- 设计交互界面。
要完成这些工作有以下方式: - 使用操作系统的图形学API以及事件响应API,称为native app,代表选手Qt。这种方案的优点是性能高,占用小。
- 在里面封装一个浏览内核,直接把应用做成自带浏览器的网页,称为web app,代表选手有electron。这种方案的优点是开发方便快捷。
- 还有一种折中路线hybrid app,既有用到web开发,又有用到操作系统API。
经典笑话:你的电脑里装了几个浏览器内核:
所以GUI开发框架做的事情其实就是绑定一些回调函数,然后操控更底层的图形学API进行界面更新。
得知这一点后很容易找到Qt的同类:
- Native UI开发框架:
- C++:Qt, WxWidget、GTK、 FLTK、 DearImGUI、Nuklear、duilib、C++ Builder、MFC、EasyX
- Python: PyQt、WxPython、PyGTK、PyFLTK、DearPyGUI、Tkinter、PyGame
- C#: WPF、WinForm
- Java:Swing、JavaFx
- web UI开发框架:
- electron
Qt调用什么?
它需要调用的是操作系统的图形学API以实现界面更新,如:OpenGL,Vulkan等
还需要从操作系统获取用户的操作,键盘输入,鼠标按动等,这里就需要区分不同操作系统了,要知道,裸操作系统是没有桌面的,自然更谈不上什么鼠标了,操作系统和桌面系统是分开的【至少Linux是这样的】,
- Qt在Linux下想要获取操作系统中的鼠标键盘信息,需要调用到X11窗口管理系统,不过依照Linux一切皆文件的思想,也可以直接在/dev中找到对应的设备IO文件解析键盘和鼠标的IO信息。
- 在Window下则需要借助hook机制,hook机制是一种消息处理机制,一旦特定消息来了,就会给应用发通知。
学Qt前需要前置知识
- C++基本语法
- C++标准库
- 面向对象编程思想