某大学生的 Qt 入门之路

这篇博客详细介绍了Qt的学习过程,包括指定父对象、Lambda表达式、坐标系统和代码框架等基本操作,深入讲解了信号和槽机制,以及如何创建菜单栏、工具栏和状态栏。此外,还探讨了UI设计,如lineEdit和QLabel的使用,事件处理,如鼠标和键盘事件,以及计时器事件。最后,博主分享了Qt应用的打包步骤。
摘要由CSDN通过智能技术生成

Qt学习

Qt是一个跨平台的GUI应用程序框架

Qt窗口类主要有三个基类:

  1. QMainWindow 带菜单栏的窗口
  2. QWidget 不带菜单栏的窗口
  3. QDialog 对话框

常用的是窗口类QWidget

一、常用操作:

1.指定父对象

对于创建出来的两个窗口,如果不指定父对象,那么这两个窗口是互相独立存在的,指定后子窗口就包含于父窗口中

比如指定 a 为 b 的父对象,即a为父窗口,b为子窗口,那么在显示的时候只要a.show()就可以显示主窗口和它的所有儿子窗口

有两种方式实现:

  1. 在定义的时候通过构造函数来实现:
    QWidget b(&a);
  1. 通过setParent(&a)来实现
    b.setParent(this);

2.Lamda表达式

C++11中添加的新特性,即匿名函数
配合信号使用,十分方便

普通函数
void fun()
{
   
	//函数体
}


匿名函数
[] ()
{
   
	//函数体
}
//一般[ ]中写 = 

[ ]中可以有三种方式把外部的变量和类传入

  1. = 把外部所有局部变量, 类中所有成员以值传递,传递变量的形式是只读的,如果要修改 需要在()后面 加上 mutable 关键字即可
  2. & 把外部所有局部变量传入,引用符号,不建议使用容易出错
  3. this 把类中所有成员传入

3.坐标系统

  1. 对于主窗口,以屏幕的左上角为原点(0,0)
    x轴往右递增,y轴往下递增
  2. 对于子窗口,以父窗口的左上角(不包含边框)为原点(0,0)x轴往右递增,y轴往下递增
  3. 对于子窗口中的控件,以子窗口的左上角为原点(0,0)x轴往右递增,y轴往下递增
move(x,y) ///以不变应万变

4.代码框架

#include "sample.h"
#include <QApplication>

int main(int argc, char *argv[])
{
   
    QApplication a(argc, argv); //应用程序类
    sample w; //定义一个对象

    w.show(); //展示才能看到窗口

    return a.exec(); //等价于先执行a.exec(),再return 0
}


/*一般框架不变也就是自己的代码不写在main.cpp,而是写在自己定义的类即sample.cpp中*/

二、信号和槽(signal and slot)—Qt对象间通信的接口

信号顾名思义,槽则可以理解为响应信号的东西

connect(&b, &QPushButton::pressed, this, &sample::close);
/*
解释:
&b,信号发出者(指针类型)
&QPushButton::pressed,处理的信号,&类名::信号名
this,信号接收者(指针类型)
&sample::close, 槽函数,&类名::槽函数名 
*/

可以实现按下按钮窗口关闭的功能

信号和槽函数 都可以自定义,可以当做类的成员函数来使用

信号自定义

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

槽自定义(类似普通函数的用法)

  1. 槽函数需要 和 信号一致(参数,返回值)
  2. 由于信号无返回值,故槽函数一定无返回值

三、菜单栏,工具栏和状态栏

使用基类 Q M a i n W i n d o w QMainWindow QMainWindow

菜单栏:

包含头文件

#include <QMenuBar>
#include <QMenu>
#include <QAction>
  1. 新建菜单栏QMenuBar *mBar = menuBar();
  2. 添加菜单QMenu *pfile = mBar->addMenu("文件");
  3. 添加菜单选项 QAction *pnew = pfile->addAction("新建");
  4. 添加选项之间的分割线 pFile->addSeparator();

工具栏:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
详细目录 1. 序 2. Qt 简介 3. Hello, world! 4. 信号槽 5. 自定义信号槽 6. Qt 模块简介 7. MainWindow 简介 8. 添加动作 9. 资源文件 10. 对象模型 11. 布局管理器 12. 菜单栏、工具栏和状态栏 13. 对话框简介 14. 对话框数据传递 15. 标准对话框 QMessageBox 16. 深入 Qt5 信号槽新语法 17. 文件对话框 18. 事件 19. 事件的接受与忽略 20. event() 21. 事件过滤器 22. 事件总结 23. 自定义事件 24. Qt 绘制系统简介 25. 画刷和画笔 26. 反走样 27. 渐变 28. 坐标系统 29. 绘制设备 30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历容器 40. 隐式数据共享 41. model/view 架构 42. QListWidget、QTreeWidget 和 QTableWidget 43. QStringListModel 44. QFileSystemModel 45. 模型 46. 视图和委托 47. 视图选择 48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义可编辑模型 51. 布尔表达式树模型 52. 使用拖放 53. 自定义拖放数据 54. 剪贴板 55. 数据库操作 56. 使用模型操作数据库 57. 可视化显示数据库数据 58. 编辑数据库外键 59. 使用流处理 XML 60. 使用 DOM 处理 XML 61. 使用 SAX 处理 XML 62. 保存 XML 63. 使用 QJson 处理 JSON 64. 使用 QJsonDocument 处理 JSON 65. 访问网络(1) 66. 访问网络(2) 67. 访问网络(3) 68. 访问网络(4) 69. 进程 70. 进程间通信 71. 线程简介 72. 线程和事件循环 73. Qt 线程相关类 74. 线程和 QObject 75. 线程总结 76. QML 和 QtQuick 2 77. QML 语法 78. QML 基本元素 79. QML 组件 80. 定位器 81. 元素布局 82. 输入元素 其他文章 宏定义中的 do {…} while (0) C++:在堆上创建对象,还是在栈上?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值