ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【QT】--常用控件(QWidget的核心属性)

【QT】--常用控件(QWidget的核心属性) 一、控件概念Widget是Qt中的核⼼概念。英⽂原义是⼩部件,我们此处也把它翻译为控件。控件是构成⼀个图形化界⾯的基本要素。像上述⽰例中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动条,下拉框等,都可以称为控 件。Qt作为⼀个成熟的GUI开发框架,内置了⼤量的常⽤控件。这⼀点在Qt Designer中就可以看到端倪。 并且Qt也提供了⾃定义控件的能⼒,可以让程序猿在现有控件不能满⾜需求的时候,对现有控件做 出扩展,或者⼿搓出新的控件。二、 QWidget的核⼼属性Qt中的各种控件都是继承自QWidget类那么也就是说Qt控件体系中QWidget为通用的部分。在我们的Qt Creator右侧可以看到QWidget的各种属性而且可以在此处对这些属性进行编辑上述的属性我们有需要的可以通过文档或者AI来进行了解。下面我们对其比较重要的属性进行讲解。1、enabled其描述的是一个控件是否处于可用状态那么其和相对的概念就是禁用所谓禁用指的是该控件不能接收任何用户的输入事件并且外观上往往是灰色的如果一个widget被禁用则该widget的子元素也是被禁用的那么我们可以使用下面的API来对控件的enabled进行获取和设置isEnabled()获取到控件的可用状态setEnabled设置控件是否可被使用true表示可用false表示禁用下面我们通过代码来感受一下可以看到此时的按钮颜色变成了灰色。上面的代码我们是在程序运行开始就将按钮进行禁用了后面我们可以在一些条件满足的情况下进行禁用和可用的调整。下面我们可以通过一个按钮产生信号然后调用槽函数来控制另外一个按钮设置成禁用状态下面我们来实践一下如上我们的ui中就存在两个控件对于这个要补充的是在同一个界面中要求不同的控件的objectName也是必须不同的后续我们可以通过ui-objectName方式来获取到对应控件对象。在Qt中会使用元编程会根据ui文件生成一个ui_widget.h文件生成的过程就会感知到界面上都有那些控件每个的objectName。我们的QPushButton提供的信号还挺多的那么我们最常用的就是clicked那么这个信号其有两个版本一个是无参数的一个是带bool参数的那么对于QPushButton来说使用无参数的即可这是因为checked带bool参数的其表示是否可被勾选这个东西对于pushButton来说没有实质性意义。如上我们就可以通过信号和槽的方式来对按钮的状态进行变化。2、geometry这个属于本意是几何那么其实际上是四个属性的统称x,y,width,height那么x和y就表示的是坐标然后width就表示的是宽度然后height就是高度。那么总的来说就是我们当前控件的位置和尺寸。如上所示。在实际开发中我们并不会直接去使用这几个属性而是通过一系列的方法来获取或者修改。我们使用geometry()可以获取到控件的位置和尺寸其返回结果是一个ORect其包含了x,y,width,height。其中x,y是左上角的坐标。然后对于ORect其就是矩形在Qt中对一些几何上的概念进行了封装就比如QPoint那么其就表示一个点然后QRect就表示一个矩形。这种是属于小对象其里面的属性非常少那么其占用空间就小。然后我们可以使用setGeometry(ORect),setGeometry(int x,int y,int width,int height);上述就是对控件的位置和尺寸进行设置那么可以直接设置一个ORect也可以分为四个属性进行单独设置。前面我们还提到了一个move那么其只是对控件的坐标进行修改。下面我们通过代码来演示一下首先是我们的初始ui如上那么我们后续通过代码我们要实现的效果是我们使用下面的四个按钮然后实现上面的target控件的位置实现移动。不过上面的代码中我们对target这个按钮的改变其实际效果是在调整左上角的位置左上角的位置改变的同时高度和宽度也同时发生了改变。那么我们要实现整体的平移效果的话那么就要使用到setGeometry的单独对每个属性进行修改的版本了。如上的方式那么就可以实现整体的平移按钮的大小不变。3、window frame下面我们补充一点在我们Qt中形成的窗口中会有一栏window frame窗口框架那么这个是操作系统自带的。那么我们的按钮的坐标其起始位置是在那边呢在Qt中关于位置尺寸提供了很多的API有的API的位置信息是以Widget本体左上角为原点的也就是不考虑window frame。那么有的就是以window frame为原点的那么我们在代码中使用frameGeometry那么其就是以window frame为源点的坐标。所以我未来对于按钮的位置我们也要去关注其起始原点是那个。4、windowsTitle这个属性就是控件的窗口标题。那么我们可以使用windowTitle()获取到控件的窗口标题setWindowTitle(const QString title)设置控件的窗口标题不过要注意的是当前的windowsTitle属性其是从属于QWidget的那么QWidget其是一个广泛的概念windowTitle属性只能针对顶层窗口这样的QWidget才有效。5、windowlcon表示窗口的图标就是这个图标。然后我们可以使用如下的API:windowlcon()获取到控件的窗口图标返回Qlcon对象setWinndowlocn(const Qlconicon)设置控件的窗口图标。然后Qlcon这个也是Qt中封装的一个类就表示一个图标。补充前面我们对于对象的创建我们推荐使用堆来创建主要是可以确保当前的控件的生命周期是足够的然后其可以通过Qt对象树来释放对象Qlcon自身是一个比较小的对象那么其创建出来后就是要设置到QWidget里面那么Qlcon对象本身释放与否不会影响图标最终的显示。Qlcon也不支持对象树无法给他执行父对象。所以我们直接将其设置到栈区即可。然后对于图片在Qt中有一个qrc机制那么这个机制是确保我们的图片所在的路径在目标客户机器上存在确保我们的图片不会被用户弄没。在我们的Qt项目上会引入一个额外的xml文件其后缀名使用.qrc表示在这个xml中要把使用的图片资源给导入进来并且在xml中进行记录Qt在编译项目的时候就会根据描述的图片信息然后找到图片内容并且提取出图片的二进制数据然后把这些二进制数据转成C代码然后最终编译到exe中。不过其也有缺点无法导入太大的资源文件就比如几个GB这种视频文件。6、qrc的使用在我们的当前项目中创建一个新文件然后呢选择文件和类中的Qt然后选择Qt Resource File。我们要选创建一个前缀那么前缀实际上我们可以理解成虚拟的目录那么这个目录其实并没有真实的存在我的电脑上是Qt自己抽线出来的。qrc的机制本质上就是把图片的二进制数据转成C代码最终我们会在代码中看到很大的char数据那么里面就是图片的二进制数据。然后为了方便Qt代码中访问到这个图片Qt就自己抽线出了虚拟的目录。然后我们将前缀设置成/即可。设置好前缀后我们就要将使用到的图片资源导入到资源文件中那么我们按Add Files。这个按钮在创建prefix之前是禁用的那么创建好prefix之后就可以使用了添加的文件就是添加到prefix下面的点击add Files得到的目录就是当前代码所在的目录那么导入图片的时候需要确保你的图片必须在resource.qrc的同级目录里面。看到这个效果那么就说明图片导入成功了。7、windowOpacity这个是和控件的不透明数值。其有如下API:windowOpacity()获取到控件的不透明值其返回float其取值为0.0-1.0其中0.0表示全透明1.0表示完全不透明。然后我们可以通过setWindowOpacity(float n)设置控件的不透明数值。8、cursor这个属性就是可以修改我们鼠标光标的样式。其有如下API:首先我们看前两个那么其都是在我们的Widget级别的同一个界面不同的控件可以设置成不同的光标第三个就是设置全局光标程序内的全局不是系统级别的全局。在Qt中存在很多内置的光标然后我们也可以自定义光标。我们就要将图片导入到项目中就是前面说到的qrc管理中然后在代码中访问到这个图片基于这个图片构造出光标对象然后进行设置。然后我们Qt代码中是使用QPixmap通过这个对象来访问一个图片。要注意的是我们的鼠标点击其实际上是一个点那么鼠标点击的时候相当于点击图片的左上角进行点击那么我们可以在构造鼠标图标的时候传参一个xy就是后面再传入两个整型数据。那么这个点我们称为热点就是鼠标点击的时候生效的位置。然后对于光标我们可以使用QPixmap对象提供的scaled方法来调整。9、font这个属性就是表示和字体相关的了。其有如下API和上面一样在Qt中也将其进行封装成了一个类这个类有如下属性10、toolTip我们的一个GUI程序界面比较复杂按钮也比较多那么当我们将鼠标悬停在这个控件上的时候那么其会弹出一个提示其有如下的API:第一个就是设置提示的内容第二个就是设置提示的时间。11、focusPolicy这个属性是一个焦点这个焦点对于键盘操作非常明显就比如界面上有一个输入框此时必须要选中这个输入框那么接下来键盘按键才会输入到输入框中如果选中的是别的控件或者是别的窗口那么此时键盘的输入就不会进入到这个输入框中。其API如下然后这个Qt::FocusPolicy其是一个枚举类型其取值如下12、styleSheet这个属性是可以通过CSS设置widget的样式表样式其描述的界面具体是啥样子的。CSS其是层叠样式表在进行网页开发的时候设置网页样式的方式然后在Qt中其将CSS参考过来然后搞了一套QSS。这个属性就是可以设置我们的样式的颜色或者控件和窗口的颜色等。那么我们实际在写代码的时候那么是通过三个元素来进行设置RGB其就是我们屏幕发光的三原色R:红 G绿 B蓝在计算机中通常会使用一个字节表示R一个字节表示G一个字节表示B。最终我们表示一个颜色就使用如下格式rgb(255,1,255);那么如上的意思就是红色和蓝色拉满绿色一点点然后三者混合成一个颜色然后如果是16进制来表示#FF01FF和上面的表示一样。在这里我们可以使用qq截图然后其会显示其具体数值。其内置了取色器。
返回列表