wordpress 版权声明,网站优化排名哪家性价比高,网站关键字 怎么设置,南京h5设计公司Qt是一个实现图形化程序的程序。为了便于我们开发#xff0c;Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件
控件是构成⼀个图形化界⾯的基本要素. 示例一#xff1a; 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…Qt是一个实现图形化程序的程序。为了便于我们开发Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件
控件是构成⼀个图形化界⾯的基本要素. 示例一 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动条,下拉框等,都可以称为控 件. 示例二Qt designer中的控件 Qt作为⼀个成熟的GUI开发框架,内置了⼤量的常⽤控件.并且Qt也提供了⾃定义控件的能⼒,可以让程序猿在现有控件不能满⾜需求的时候,对现有控件做 出扩展,或者⼿搓出新的控件。 二.QWidget核心属性
在Qt中,使⽤QWidget类表⽰控件.像按钮,视图,输⼊框,滚动条等具体的控件类,都是继承自QWidget.
可以说,QWidget中就包含了Qt整个控件体系中,通⽤的部分. 在Qt Designer中,随便拖⼀个控件过来,选中该控件,即可在右下⽅看到QWidget中的属性 这些属性既可以通过Qt designer直接修改也可以通过代码修改。 注想了解具体属性及含义可以再帮助文档中查询。 1.简述Qwidget核心属性
表格中列出来核心属性及其作用
属性作用enabled表示控件是否可用。true表示可用false表示不可用geometry位置和尺寸包含x,y,width,height 四个部分. 其中坐标是以⽗元素为参考进⾏设置的.windowTitle设置widget标题windowlcon设置widget图标windowOpacity设置widget透明度cursor鼠标悬停时的图标形状font字体相关属性toolTip鼠标悬停在widget上会在状态栏中显示的提示信息toolTipDuringtoolTip 显⽰的持续时间statusTipWidget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等).styleSheet允许使⽤ CSS来设置widget 中的样式.focusPolicy 该 widget 如何获取到焦点. Qt::NoFocus控件不参与焦点管理即⽆法通过键盘或⿏标获取焦点 Qt::TabFocus控件可以通过Tab键获得焦点 • • • Qt::ClickFocus控件可以通过⿏标点击获得焦点 • Qt::StrongFocus控件可以通过键盘和⿏标获得焦点 • Qt::WheelFocus控件可以通过⿏标滚轮获得焦点在某些平台或样式中可能不可 ⽤ windowModality指定窗⼝是否具有模态⾏为.accessibleName设置widget的可访问名称.这个名称可以被辅助技术(像屏幕阅读器)获取到.这个属性⽤于实现⽆障碍程序的场景中(也就是给盲⼈写的程序). 接下来让我们详细了解每个属性吧。 三.QWidget的enabled属性
1.概念
enabled属性用于表示部件是否可用一个可用的部件可以接收和处理鼠标和键盘事件当部件不可用时则无法接收和处理鼠标和键盘事件。 2.API
api作用isEnabled()获取到控件的可⽤状态.setEnabled设置控件是否可使⽤.true 表⽰可⽤,false 表⽰禁⽤. • 所谓禁⽤指的是该控件不能接收任何⽤⼾的输⼊事件,并且外观上往往是灰⾊的. • 如果⼀个widget被禁⽤,则该widget的⼦元素也被禁⽤. 3.代码示例
eg1:使⽤代码创建⼀个禁⽤状态的按钮 结果 eg2通过按钮2切换按钮1的禁⽤状态
步骤一在designer中创建两个按钮并右键为其创建槽函数 步骤2编写对应槽函数 QObject 的 objectName 属性介绍: obiectName是QObject的重要属性。Qwidget继承QObject也具有了该属性。 在⼀个 Qt 程序中,objectName 相当于对象的⾝份标识, 彼此之间不能重复. 在使⽤ Qt Designer 时,尤其是界⾯上存在多个widget 的时候,可以通过objectName 获 取到指定的widget对象. 结果 四.geometry属性
1.概念
位置和尺寸。本质是四个属性的统称: • x 横坐标 • y 纵坐标 • width 宽度 • height ⾼度 如图示 注 1.实际开发中,我们并不会直接使⽤这⼏个属性,⽽是通过⼀系列封装的⽅法来获取/修改 2.Qt坐标系为左手坐标系左上角为原点。 2.API
api作用geometry() 获取到控件的位置和尺⼨. 返回结果是⼀个QRect,包含x,y,width,height.其 中 x, y是左上⻆的坐标. setGeometry(QRect) setGeometry(int x,int y, int width,int height) 设置控件的位置和尺⼨. 可以直接设置⼀个QRect 也可以分四个属性单独设置. 3.代码示例
eg1控制按钮的位置
步骤一在designer界⾯中拖五个按钮. 步骤二转到按钮clicked信号对应的槽函数编写代码 结果 问题 运行程序我们看到点击按钮只改变target按钮左上角位置并且会影响尺寸变化这不是我们预期的效果。 原因 上述代码中我们是直接设置的 QRect 中的x,y.相当于修改左上点坐标。 实际上QRect内部是存储了左上和右下两个点的坐标,再通过这两个点的坐标差值计算⻓宽. 单纯修改左上坐标就会引起整个矩形的⻓宽发⽣改变. 优化 设置左上点坐标的同时设置尺寸使其和之前保持一致 优化版控制按钮位置 结果 eg2表白恶搞
步骤一往界⾯上拖拽两个按钮和⼀个Label. 步骤二编写槽函数 结果 五.window frame 的影响 window frame 窗口框架 是操作系统自带的 1. 影响
如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的 时候就有两种算法. 包含window frame 和 不包含 window frame.
在Qt中关于位置尺寸提供了很多的API 有的API的位置是以Widget本体左上角为原点的不包含 window frame.有的API的位置是以window frame为左上角为原点. 其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算的. 其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计算的. 当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的. 2.API
api作用x()获取横坐标,计算时包含 window framey()获取纵坐标,计算时包含 window framepos()返回 QPoint 对象, ⾥⾯包含 x(), y(), setX(), setY() 等⽅法.计算时包含 window frame frame Size() 返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.计算时包含 window frameframeGeometry()返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size.计算时包含 window frame 对象.width()获取宽度 计算时不包含 window frameheight()获取⾼度 计算时不包含 window framesize()返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.计算时不包含 window framerect()返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取并设置 x,y, width, size.计算时不包含 window frame 对象.geometry()返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size.计算时不包含 window frame 对象.setGeometry()直接设置窗⼝的位置和尺⼨. 可以设置 x, y, width, height, 或者 QRect 对象.计算时不包含 window frame 对象 3.代码示例
geometry 和 frameGeometry 的区别
步骤创建一个按钮查看geometry 和 frameGeometry的返回值 结果 问题 执行程序, 可以看到 构造函数中, 打印出的 geometry 和 frameGeometry 是相同的.但是在点击按钮时, 打印的 geometry 和 frameGeometry 则存在差异. 原因 在构造⽅法中, Widget刚刚创建出来,还没有加⼊到对象树中.此时也就不具备 Window frame. 在按钮的slot函数中,由于⽤⼾点击的时候,对象树已经构造好了,此时Widget 已经具备了 Window frame,因此在位置和尺⼨上均出现了差异. 注意 如果把上述代码修改成打印 pushButton 的 geometry和frameGeometry,结果就是完全相 同的.因为 pushButton 并⾮是⼀个窗⼝.