QT常用控件(1)
控件是构成QT的基础元素,例如Qwidget也是一个控件,提供了一个‘空’的矩形,我们可以往里面添加内容和处理用户输入,例如:按钮(QpushButton),基础显示控件(Lable),鼠标点击等。快速利用控件开发出需求的界面的重要一步就是学习QT控件的内容,接下来我们开始学习常用控件QWidget及其属性吧。
一,QWidget
QWidget是所有控件间接或者直接的父类,提供了一个空的矩形,我们可以通过对这个矩形的内容以及本身进行开发,实现我们需要的界面,说了这么多,我们先见一下QT的Qwidget界面吧。
’
没错,这个我们运行后每次都出现的就是Qwidget界面,其他控件都是在QWidget控件上进行开发。点击之后可以在ui界面进行查看,Qwidget的属性有很多,我们介绍和学习一些常用的属性
1,控件启用
enabled:这个代表控件是否启用,如果不启用那么控件就是灰色的,而且我们无法对其进行任何操作,接下来我们看看代码和效果,因为QWidget被禁用了,所有基于其添加的控件自然也无法使用,当然我们也可以通过右侧UI界面的属性进行勾选设置。
可能会有细心的朋友发现很多时候UI设置的属性和代码设置的属性不一样,那么哪一个优先级高呢?取决于widget.cpp里面的构造函数
我们也可以通过Isenable()和setEnable获取,改变控件是否启用的属性。
2,控件位置
在上面的控件属性图里面相信我们也看到了下面这个
这个就是坐标与大小属性,前面两个是x,y坐标(横坐标向左变大,纵坐标向下增大),800x600就是宽和高。那我们该怎么获取这个属性,修改这个属性呢?
首先介绍一下geometry函数
这个函数可以获取控件的位置坐标,以及控件大小长宽,位置坐标的Y轴是向下增长的。0点在左上角,以widget控件为参考系,单位是像素点。
那我们该如何设置控件的坐标呢?我们可以查看qt离线文档
我们可以使用QRectF接收控件坐标和设置控件坐标。QRectF和QRrct可以相互显示和隐式转换,区别在于QRect存储是整形,QRect存储的是浮点数。接下来我们简单使用一下吧
//修改位置前代码
QPushButton* my_button=new QPushButton(this);my_button->setText("肖涵坤");
//使用按钮控件修改后
void Widget::MoveButton(){
//my_button被我移到widget里面变成了成员变量,方便获取QRect rect=this->my_button->geometry();//注意X,Y是起始位置,width和height是右下角位置,//单独调整X和Y,width和height不会改变,导致控件变小,xy超过width和height时控件直接大小清零不显示了//原因是单独设置X,Y时,width和height坐标不变//下面的效果实际上是平移,下面一行代码设置效果等同rect.setRect(rect.x()+100,rect.y()+100,rect.width(),rect.height());
// rect.setX(rect.x()+100);
// rect.setY(rect.y()+100);
// rect.setWidth(rect.width()+100);
// rect.setHeight(rect.height()+100);this->my_button->setGeometry(rect);
}
效果:每次点击按钮都会将按钮下右下角移动根号下100*100/2个像素点
二,windowIcon
1,控件作用
windowIcon是用来设置widget窗口图标的,类似于下面谷歌的图标
我们设置窗口,需要先指定一个图片路径作为窗口图标,我们这里先简单的试一下
QIcon icon("D:\\HuaweiMoveData\\Users\\86182\\Desktop\\学校作业\\love.jpg");this->setWindowIcon(icon);
效果:
我们可以看到两个窗口图片都改变了,但是有一个问题,我们的图片是存储在本地的桌面,如果项目换了一个坏境或者图片丢失这个图片就无法访问会报错了,那我们该怎么办,这就是我接下来要讲的。
2,qrc机制
这个机制原理很简单,实际上就是将文件存储在QT项目的工程目录下面,qrc机制负责帮我们管理这些文件。
qrc机制qrc ⽂件是⼀种XML格式的资源配置⽂件, 它⽤XML记录硬盘上的⽂件和对应的随意指定的资源名称. 应⽤程序通过资源名称来访问这些资源。它可以讲图片等第三方资源以二进制形式写入到可执行文件里面,即使资源丢失也不会影响展示效果,达到了不依赖路径的效果。那qrc如何使用呢?
1,选择新建文件
2,设置qrc名字
3,选择需要qrc的项目
4,添加qrc文件,路径设为/,//可以理解为目录
5,选择添加文件
6,因为文件不在qrc目录及子目录下,会自动复制我们需要手动将文件复制到工程目录下
7,选择保存即可看到这个文件
8,在代码里面使用,注意之前选择的/就是目录
qrc优点:代码稳定,不会出现资源丢失的情况
缺点:如果资源太大,exe文件体积会很大,编译时因为要将大量的资源编译成二进制需要消耗大量时间。
三,windowOpacity
这个控件是设置控件的透明度的,范围是0-1,透明度由小到大。大于1的效果和1差不多,负数效果和0一样,我们可以看一下0.5透明度效果。
四,cursor
这个的意义是鼠标停留时光标的形状,我们可以通过setCusor设置鼠标停留在控件上面的形状。
下面是qt官方提供的光标形状
很抱歉,暂时无法看效果,因为光标截图的时候切走了,不够大家可以自己试试。
QCursor cursor(Qt::WaitCursor);this->setCursor(cursor);
有时候我们想用本地下载的图片,如唱跳rap打篮球,我们该怎么办呢?我们可以使用下面的构造函数设置,hotX和hotY代表鼠标点击在光标的的那个位置,零点在图片的左上角
还有我们设置的图片可能需要调整大小,我们可以通过下面这个函数调整
这样子我们就实现了自定义鼠标
QPixmap pip(":/love.jpg");pip=pip.scaled(20,20);QCursor cursor(pip,10,10);this->setCursor(cursor);
五,字体设置
我们可以简单的使用一下
QFont font("微软雅黑",5,50,true);ui->label->setFont(font);
接下来我们介绍一下里面常用属性
Bold:是否加粗
Capitalization:文本大小写规则
Family:字体样式
pointSize:字体大小,数字越大字体越大
weight:字体的粗细,范围【0-99】
italic:是否倾斜
underline:下划线
strikeOut:删除线
六,toolTip
这个控件的作用是当鼠标悬停在控件上面的时候会有提示,效果如下图
相信这么简单的使用方法就不需要多介绍了,直接将想要提示的文本写入里面就可以了,例如我上面的文本就是设置成了这是一个Label类型
七,foucsPolicy
这个控件的作用和名字一样设置焦点的策略。首先焦点是什么呢?焦点就是能选择这个元素,就想玩电子版象棋,当你点到想要移动的棋子时,它被选中了,就是聚焦了,那焦点可以通过哪几种方法选中呢?一般是tap键,鼠标点击这两种方式。
这上面介绍了五种聚焦模式,也就是选中,上面的value是2的次方,原理类似于位图
Qt::TabFocus 按tap键可以选中
Qt::ClickFocus 通过鼠标点击
Qt::StrongFocus 可以通过所以方式选中
Qt::WheelFocus 可以通过鼠标滚动选中
Qt::NoFocus 无法选中
八,styleSheet
qt里面支持向前端界面一样,使用CSS格式设置属性,就是下面这种形式,不过qt支持的属性比较少称为QSS,大家可能通过离线文档查看每个具体控件支持的属性
上面的代码其实有问题,因为qt的setStyleSheet是进行覆盖设置的,那我们怎么进行追加呢?答案是先使用styleSheet获取原先的QSS,再进行字符串追加实现效果叠加。
注:记得加分号分割哦
九,通过UI界面实现上述效果
qt不仅仅可以通过代码实现控件属性设置,也可以通过UI界面设置,大家可以试试,会了代码设置基本上使用UI界面没有问题