网站建设常用问题库,做汽车配件外贸用什么网站,河南手机网站建设,郑州网站专业建设qq一、QPushButton
QWidget中设计到的各种属性/函数/使用方法#xff0c;针对接下来要介绍的Qt的各种控件都是有效的。
使用QPushButton表示一个按钮#xff0c;这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton#xff0c;这个类是一个抽象类#xff0c;是…一、QPushButton
QWidget中设计到的各种属性/函数/使用方法针对接下来要介绍的Qt的各种控件都是有效的。
使用QPushButton表示一个按钮这也是当前我们最熟悉的一个控件了。这个类继承了QAbstractButton这个类是一个抽象类是其他按钮的父类。 抽象类这个类包含了纯虚函数无法创建出实例想要使用这个类就得创建子类重写上述的纯虚函数才能够创建出子类的实例。
按钮的属性 QPushButton相关代码
1给按钮加图标图片
后续编写代码如果用到一些图片等外部资源都会优先使用qrc除非遇到特别大的资源。 虽然图标有了但是我们就喜欢大的。 2添加快捷键
前面写过一个例子通过四个按钮控制target按钮的移动之前这个移动式通过鼠标点击按钮实现的。此处我们就可以引入快捷键通过快捷键来操作。此处按钮直接通过图片来表示。 设置槽函数。
设置快捷键
参数是一个QKeySequence对象key按键sequence顺序表按下得快捷键不一定是一个按键也可能是组合键。 键盘快捷键默认就是能连发的但是鼠标点击按钮则不行设置autoRepeat属性。
二、QRadioButton
QRadioButton是单选按钮可以让我们在多个选项中选择一个
属性 check选中checkable是否可以被选中checked选完了。排他性选项只能选中一个还是选中多个。checkable只是能够让按钮不选中仍然可以响应点击事件。使用enable属性来设置不被响应。
代码
问题 clicked(bool) 从此处checked就表示了当前radioButton的选中状态。
toggled(bool) 切换的时候会被触发checked状态发生改变就会触发这个信号
代码
代码基于QRadioButton写一个模拟点餐的小程序RadioButton默认是排他的一旦界面上存在多组单选按钮的时候希望组和组之间不要有影响。Qt中提供了QButtonGroup类可以针对单选按钮进行分组。 三、CheckBox的使用
QCheckBox表示复选按钮可以允许选中多个和QCheckBox最相关的属性也是checkable和checked都是继承自QAbstractButton。
代码写一个今日任务的复选框代码
四、QLabel的属性 右对齐左对齐居中对齐等等。 QLable的文本格式
代码 设置图片显示图片 事件用户的操作会对应一些信号Qt中表示用户的操作有两类概念一个是信号另一个是事件。当用户拖拽修改窗口大小的时候就会触发resize事件(resizeEvent)像resize这样的事件是连续变化的把窗口尺寸从A拖到B这个过程中会触发一系列的resizeEvent此时我们就可以借助resizeEvent来完成上述的功能。可以让Widget窗口类重写父类QWidget的resizeEvent虚函数。在鼠标拖动窗口尺寸的过程中这个函数就会被反复调用执行每次触发一个resizeEvent事件都会调用一次对应的虚函数。由于此处进行了函数重写调用父类的虚函数就会实际调用到子类的对应的函数多态。在实际编程中指定回调函数其实有很多种写法
1设置函数指针
2设置仿函数
3设置lambda
4通过重写父类虚函数框架中拿着父类的指针调用这个函数如果你创建了子类重写了这个函数此时在多态机制下实际执行的就是子类的函数了。
5Qt中的信号槽
代码此处形参event是非常有用的这里就包含了触发resize事件这一时刻窗口的尺寸的数值。 QLable的对齐方式 在Qt Creator右侧属性编辑区能够看到类之间的继承关系QLabel继承自QFrameQFrame继承自QWidget。设置带有边框的Label QLabel设置自动换行边距缩进 此处设置的缩进即使文本换行了后续的行也会产生缩进不仅仅是首行缩进。前端中CSS也能设置缩进text-indent属性首行缩进。 代码
QLabel设置伙伴
代码Qt中QLabel中写的文本是可以指定快捷键的此处快捷键的规则功能要比QPushButton弱很多。是在文本中使用 跟上一个字符来表示快捷键。比如A 》通过键盘上的alta来触发这个快捷键。B》通过键盘上的altb来触发。绑定了伙伴关系之后通过快捷键就可以选中对应的单选按钮/复选按钮。 QLabel功能比较丰富的控件。 五、QLCDNumber的属性
是一个专门用来显示数字的控件类似于老式计算器的效果。
核心属性 代码写一个倒计时程序。
使用QLCDNumber显示一个初始的数值比如10。每隔一秒钟数字就减1一直到0就停止了。
此处关键要点是要实现每秒钟-1这个效果。周期性的执行某个逻辑。C标准库中没有提供定时器的实现Boost里面提供了对应的功能。Qt中也封装了对应的定时器。 结合connect函数把这个timeout信号绑定到需要的槽函数中就可以执行逻辑修改LCDNumber中的数字了。 通过for循环实现上面的逻辑。
C 11 标准库中引入了sleep的操作。叫做sleep_for 这个代码是在Widget的构造函数里写的需要把Widget构造完毕然后才能执行后续的显示操作。 在构造函数中另外创建一个线程在新的线程中执行上述循环更新操作。线程操作本身操作系统提供的apipthread_create windows api可以参阅MSDN windows的文档。 Qt里里面有一个专门的线程去负责维护更新的主线程main函数所在的线程对于GUI来说内部包含了很多的隐藏状态Qt为了保证修改界面的过程中线程安全是不会受到影响的Qt禁止了其他线程直接修改界面。形如这种操作就是在修改界面。因此Qt为了确保线程安全直接要求所有的对界面的修改操作必须在主线程中完成对于Qt的槽函数来说默认情况下槽函数都是由主线程调用的。在槽函数中修改界面是没有任何问题的a.exec就会使主线程进入”事件循环“exec就会一直循环下去每执行一次循环就会有一些固定的事情要操作。
六、ProgressBar控件
使用ProgressBar表示一个进度条 代码创建一个进度条让这个进度条的进度跟随时间增长可以假设每隔100ms然进度条1。 这个头文件的包含释放到了widget.h中。上个QLCDNumber的列子中头文件包含到了.cpp中的。虽然在widget.h中用到了QTimer但是却没在.h文件中包含QTimer头文件为啥这个代码编译不会出错为啥此处的QTimer就不会提示找不到定义之类的。
上述问题其实是通过Qt内部提供的一个特殊技巧来实现的。在Qt中有一个专门的头文件这个头文件中包含了Qt中所有类的前置声明。这个头文件一般我们不会直接接触到但是包含其他的Qt的头文件都会间接包含到这个头文件。 这个是C中的特殊技巧在Qt中被使用到了。
Qt为啥要使用上述的技巧上述技巧能解决什么问题有啥提升呢
主要解决的是编译速度的问题C/C的代码编译速度在其他语言横向对比中是非常慢的对于一个大规模的项目编译速度可能非常满。C编译速度慢和#include头文件有直接关系的。由于include关系错综复杂因此尽可能减少include头文件的个数就可以有效的减少编译事件Qt中就使用class前置声明的方式来尽量减少头文件的包含。通过前置声明的方式Qt中的头文件每个头文件包含其他头文件数量都能得到一定的降低。但是实际开发中还是要该包含就包含。与其通过特殊技巧来缩短编译时间不如说引入更好的硬件资源来更高效的编译。一些互联网大厂都有专门的编译集群分布式编译。所以在C 20标准开始就引入了模块module来替代#include
把我们的进度条改成红色
选择器咱们设置的样式到底针对哪个控件生效。
这里发现24%数字跑到了左上角了。这可能是Qt的bug
进度条具体的进度如何设置一般都是根据实际的任务类型来灵活设置的
例如要读取一个很大的文件就可以先获取到文件的总大小每读取一部分数据可以计算出读了多少数据更新一下进度条的数值。设置进度条的过程中往往确定要搭配定时器的。
七、QCalendarWidget的使用
核心属性
重要的信号 代码
八、常用控件QLineEdit的属性
QLineEdit用来表示单行输入框可以输入一段文本但是不能换行
核心属性 这个text属性不仅仅可以通过代码来设置用户在输入框中编辑也会影响到text值的变化。
1通过代码中设置text界面上的文本会发生改变。
2直接操作修改界面上的文本输入框可以编辑的text属性的值也会发生改变。
双向都会发生改变。
常用的信号 代码让用户输入个人信息。姓名密码性别电话通过提交按钮把这些内容全都获取到 inputMask功能比较有限只能进行简单的验证。就需要使用正则表达式这是计算机中的通用概念和具体的编程语言无关。正则表达式本质上就是带有特殊字符的字符串特殊字符串用来表示另一个字符串的特征。此时就可以借助正则表达式来描述一些具有一定特点的字符串基于这些特点就可以完成字符串的匹配。正则表达式涉及到的这些符号都比较抽象挺难记忆的一般情况下我们在开发中都是边写代码边查阅资料来使用的。
代码
此处的规则是输入框要检查输入的内容是否是合法的手机号码如果是则按钮设为可用状态如果不是设为不可用状态。 验证两次输入的密码是否一致使用textEdited信号来触发对于两个输入框内容的判定。 形参没有用到会有警告警告不处理也是完全可以的以后在公司中有的团队可能要求把警告当成错误一样处理比如这样写这个写法就是类型转换这个写法对于代码的实际逻辑是没有任何影响的。同时可以骗过编译器警告就没有了。
代码针对密码可以切换显示密码状态。 当前讲的很多的代码例子都比较简单但是我们需要认真敲代码。最好做出一些修改尝试。
九、QTextEdit的使用
QPlainTextEdit只能表示纯文本Plain Text
而我们要介绍的这个控件支持html和markdown格式的文本。
核心属性 核心信号 代码获取多行输入框的内容 演示QTextEdit的这几个信号 十、QComboBox的属性
它表示一个下拉框。
核心属性 核心方法 核心信号 弹出下拉框之后鼠标滑过某个选项选项会带有高亮效果此时就表示激活。
代码模拟麦当劳点餐 下拉框里的内容很多时候不是代码中写死的而是通过文件/网络加载数据得到的。比如选课操作。
通过文件进行加载