QT

什么是 qt

  • Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。
  • Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要
  • Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。
  • Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等

qt 发展史

  • Qt 由奇趣科技公司(Trolltech)的两位创始人于 1990 年着手开发,1995 年发布 Qt 1.0。
  • 2008 年,奇趣科技被诺基亚公司收购,Qt 也因此成为诺基亚旗下的编程语言工具。
  • 在智能手机的冲击下诺基亚大厦轰然倒塌,2012 年将 Qt 转让给 Digia 公司。

qt 应用程序框架(英文路径!!!)

项目 (Application)

  • Qt Widgets Application,支持桌面平台的有图形用户界面(Graphic User Interface,GUI) 界面的应用程序。GUI 的设计完全基于 C++ 语言,采用 Qt 提供的一套 C++ 类库。
  • Qt Console Application,控制台应用程序,无 GUI 界面,一般用于学习 C/C++ 语言,只需要简单的输入输出操作时可创建此类项目。
  • Qt Quick Application,创建可部署的 Qt Quick 2 应用程序。Qt Quick 是 Qt 支持的一套 GUI 开发架构,其界面设计采用 QML 语言,程序架构采用 C++ 语言。利用 Qt Quick 可以设计非常炫的用户界面,一般用于移动设备或嵌入式设备上无边框的应用程序的设计。
  • Qt Quick Controls 2 Application,创建基于 Qt Quick Controls 2 组件的可部署的 Qt Quick 2 应用程序。Qt Quick Controls 2 组件只有 Qt 5.7 及以后版本才有。
  • Qt Canvas 3D Application,创建 Qt Canvas 3D QML 项目,也是基于 QML 语言的界面设计,支持 3D 画布。

类信息 (Details)

  1. 基类 (父类)
  • QMainWindow 是主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口
  • QWidget 是所有具有可视界面类的基类,选择 QWidget 创建的界面对各种界面组件都可以 支持
  • QDialog 是对话框类,可建立一个基于对话框的界面

编译运行

QApplication 应用程序类

  1. QT 头文件没有.h,头文件和类名一样
  2. 有且只有一个应用程序类的对象
    QApplication (argc,argv)
  3. QWidget 是一个窗口基类,所有继承它的类也可以理解为窗口类,窗口创建好后默认隐藏,显示出来需要人为调用 show () 函数
  4. a.exec ();让程序一直执行 (while), 等待用户操作

pro 项目

  1. 注释: #
  2. 模块???
  3. 高于 qt4 版本,为了兼容 qt4
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  4. 应用程序的名字
    TARGET = 01_test
  5. 指定 makefile 的类型
    TEMPLATE = app
  6. 源文件 .cpp
    SOURCES += main.cpp
    widget.cpp
  7. 头文件 .h
    HEADERS += widget.h

模块


指定父对象

比如我要在窗口中显示一个按钮
如果不指定父对象,对象和对象之间没有关系,独立显示
所以要指定对象
如果 a 指定 b 为它的父对象,a 就在 b 上面
指定父对象:

  • setParent
    eg: b.settParent(&a)
  • 通过构造函数传参

信号和槽

信号和槽是 Qt 特有的消息传输机制,它能将相互独立的控件关联起来。
在 Qt 中,用户和控件的每次交互过程称为一个事件
Qt 中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号
在 Qt 中,对信号做出的响应动作就称为槽


QPushButton b1;
想要 b1 具有点击或者其他效果
connext (&b1,&QPushButton::pressed,this,&MainWidget::close)

  • &b1:信号发出者,指针类型
  • &QPushButton::pressed:处理的信号, & 发送者的名字::信号名字
  • this:信号接收者
  • &MainWidget::close:槽函数,信号处理函数 & 接收的类名::槽函数名字

自定义槽

自定义槽:普通函数的用法
Qt5: 任意的成员函数,普通全局函数,静态函数
槽函数需要和信号__一致__(参数,返回值)
由于信号都是没有返回值,所以槽函数一定没有返回值

自定义信号

信号必须有 signals 关键字来声明
信号没有返回值,但可以有参数
信号就是函数的声明,只需声明,无需定义
使用:emit mySignal ();

坐标系统

对于父窗口 (子窗口),坐标系统相对于屏幕

  • 原点:相对于屏幕左上角
  • x:往右递增
  • y:往下递增
访问量 访客