【QT】Widget

目录

widget常用属性及其作用

enabled

geomtry

window frame

window frame的影响

相关API 

windowTitle 

windowIcon

qrc机制 

qrc使用方式

自定义鼠标图片 

设置字体样式

设置鼠标悬停提示

toolTip

控件获取焦点

styleSheet  


widget常用属性及其作用

属性作用
enabled设置控件是否可使用
geometry位置和尺寸,包含x,y,width,height四个部分
windowTitle设置widget标题
windowIcon设置widget图标
windowOpacity设置widget透明度
cursor鼠标悬停时显示的图标形状,是普通箭头,还是沙漏,还是十字等
font
字体相关属性.
涉及到字体家族, 字体⼤⼩, 粗体, 斜体, 下划线等等样式
toolTip
⿏标悬停在 widget 上会在状态栏中显⽰的提⽰信息
toolTipDuring
toolTip 显⽰的持续时间.
statusTip
Widget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等)
whatsThis
⿏标悬停并按下 alt+F1 时, 显⽰的帮助信息(显⽰在⼀个弹出的窗⼝中).
styleSheet
允许使⽤ CSS 来设置 widget 中的样式.
Qt 中⽀持的样式⾮常丰富, 对于前端开发⼈员上⼿是⾮常友好的.
focusPolicy
该 widget 如何获取到焦点.
Qt::NoFocus:控件不参与焦点管理,即⽆法通过键盘或⿏标获取焦点
Qt::TabFocus:控件可以通过Tab键获得焦点
Qt::ClickFocus:控件可以通过⿏标点击获得焦点
Qt::StrongFocus:控件可以通过键盘和⿏标获得焦点
Qt::WheelFocus:控件可以通过⿏标滚轮获得焦点(在某些平台或样式中可能不可
⽤)
layoutDirection
布局⽅向.
Qt::LeftToRight:⽂本从左到右排列,也是默认值。
Qt::RightToLeft:⽂本从右到左排列。
Qt::GlobalAtomics:部件的布局⽅向由全局原⼦性决定(PS 这个翻译其实有点尴尬. 其实就是根据应⽤程序中的其他 widget 布局⽅向确定的)
inputMethodHints
针对输⼊框有效, ⽤来提⽰⽤⼾当前能输⼊的合法数据的格式. ⽐如只能输⼊数字, 只能
输⼊⽇期等.

enabled

API说明
isEnabled()获取到控件的可用状态
setEnabled设置控件是否可使用

示例: 

button->setEnabled(false);  //设置禁用

*所谓“禁用”指的是该控件不能接收任何用户的输入事件,并且外观往往也是灰色的。

*如果一个widget被禁用,则该widget的子元素也被禁用。 

geomtry

位置和尺寸,其实是四个属性的统称:

  • x 横坐标
  • y 纵坐标
  • width 宽度
  • heigh t宽度

API说明
geometry()获取到控件的位置和尺寸,返回结果是一个QRect,包含x,y,width,height,其中 x,y是左上角的坐标

setGeometry(QRect)

setGeometry(int x,int y,int width,int height)

设置控件的位置和尺寸,可以直接设置一个QRect,也可以分四个属性单独设置

//获取当前位置信息

QRect rect = ui->pushButton_target->geometry();

//改变控件位置信息

ui->pushButton_target-> setGeometry (rect. x () - 5 , rect. y (), rect. width (),
rect. height ());

window frame

window frame的影响

如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的
时候就有两种算法. 包含 window frame 和 不包含 window frame.
其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算
的.
其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计算的.
当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的.

实际差别如下图所示 

相关API 

API说明
x()

获取横坐标

计算时包含 window frame

y()
获取纵坐标
计算时包含 window frame
pos()
返回 QPoint 对象, ⾥⾯包含 x(), y(), setX(), setY() 等⽅法.
计算时包含 window frame
frameSize()
返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法. 计算时包含 window frame
frameGeometry()
返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,
width, size. 计算时包含 window frame 对象.
width()
获取宽度
计算时不包含 window frame
height()
获取⾼度
计算时不包含 window frame
size()
返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.
计算时不包含 window frame
rect()
返回 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 对象

windowTitle 

API说明
windowTitle()
获取到控件的窗⼝标题.
setWindowTitle(const
QString& title)
设置控件的窗⼝标题.

代码示例:

this -> setWindowTitle ( " 这是标题 " );

windowIcon

API说明
windowIcon()
获取到控件的窗⼝图标. 返回 QIcon 对象.
setWindowIcon(const
QIcon& icon )
设置控件的窗⼝图标.

注意:同 windowTitle, 上述操作仅针对顶层 widget 有效.

代码示例:

// 创建图标对象
QIcon icon ( "d:/rose.jpg" );
// 设置图标
this -> setWindowIcon (icon);  

设置图标的时候,可能会存在路径图片的问题,因此,Qt中有一个qrc机制

qrc机制 

这个机制从根本上解决下述两个问题:

  1. 确保你的图片所在的路径在目标用户机器上存在
  2. 确保你的图片不会被用户搞没了

在Qt项目引入一个额外的xml文件(后缀名使用 .qrc表示)在这个xml中把要使用的图片资源给导入进来,并且在xml中进行记录。

Qt在编译项目的时候,就会根据qrc中描述的图片信息,找到图片内容,并且提取出图片的二进制数据,把这些二进制数据转成C++代码,最终编译到exe里。

但是qrc机制也存在缺点:无法导入太大的资源文件,比如搞几个GB的这种视频文件,qrc就无能为力了

qrc使用方式

第一步:在项目中创建一个qrc文件,文件名不要带中文和特殊符号

第二步:把图片导入到qrc文件中

(1)先创建一个“前缀”(prefix)

所谓的“前缀”可以理解成虚拟的目录,这个目录没有在你的电脑上真实存在,是Qt自己抽象出来的 ,qrc机制本质上就是把图片的二进制数据,转成C++代码(最终就会在代码中看到很大的char数组,里面就是图片的二进制数据)

为了方便Qt代码中访问到这个图片,Qt就自己抽象出了虚拟的目录

(2)把需要的图片导入到资源文件中

 

上示的按钮在创建prefix之前是禁用的,创建好prefix之后就可以使用了,添加的文件就是添加到prefix下面的。 点击这个按钮后,所得到的目录就是当前代码所在的目录。

导入图片的时候,需要确保你导入的图片必须在resourse.qrc文件的同级目录

如上即可完成添加。

当代码中需要访问qrc中管理的文件时,就需要在路径上带有:前缀,格式如下:

QIcon icon(" :/wallhaven-7p3993.jpg")

自定义鼠标图片 

  //访问到图片文件
  QPixmap pixmap(":/123.jpg");
  //构造光标对象
  QCursor cursor(pixmap,10,10);
  //把光标设置进去
  this->setCursor(cursor);

但是图片可能会因为太大或者太小,所以我们可以通过缩放或者放大图片以便实现效果

 //访问到图片文件
 QPixmap pixmap(":/123.jpg");
 pixmap = pixmap.scaled(100,100);

缩放操作不是对图像本身进行修改,而是 返回一个新的图像副本,所以我们需要将它在存起来

iconfont-阿里巴巴矢量图标库

设置字体样式

    QLabel* label= new QLabel(this);
    label->setText("这是一段文本");
    
    //创建字体对象
    QFont font;
    font.setFamily("仿宋");
    font.setPixelSize(30);
    font.setBold(true);
    font.setItalic(true);
    font.setUnderline(true);
    font.setStrikeOut(true);
    
    //把font对象设置到lebel中
    label->setFont(font);

设置鼠标悬停提示

一个GUI程序,界面比较复杂,按钮很多的时候,我们希望鼠标悬停在某个控件的时候,能弹出一个提示

toolTip

API说明
setToolTip

设置toolTip

鼠标悬停在该widget上时会有提示说明

setToolTipDuring

设置toolTip提示的时间,单位ms。

时间到后toolTip自动消失

代码示例:

ui->pushButton_yes-> setToolTip ( " 这个是 yes 按钮 " );
ui->pushButton_yes-> setToolTipDuration ( 3000 );

控件获取焦点

设置控件获取到焦点的策略. ⽐如某个控件能否⽤⿏标选中或者能否通过 tab 键选中.
所谓 "焦点" , 指的就是能选中这个元素. 接下来的操作 (⽐如键盘操作), 就都是针对该焦点元素进⾏的了. 这个对于 输⼊框, 单选框, 复选框等控件⾮常有⽤的.
API说明
focusPolicy()
获取该 widget 的 focusPolicy, 返回 Qt::FocusPolicy
setFocusPolicy(Qt::FocusPolicy policy )
设置 widget 的 focusPolicy.
Qt::FocusPolicy 是⼀个枚举类型. 取值如下
Qt::NoFocus :控件不会接收键盘焦点
Qt::TabFocus :控件可以通过Tab键接收焦点
Qt::ClickFocus :控件在⿏标点击时接收焦点
Qt::StrongFocus :控件可以通过Tab键和⿏标点击接收焦点 (默认值)
Qt::WheelFocus : 类似于 Qt::StrongFocus , 同时控件也通过⿏标滚轮获取到焦点 (新增
的选项, ⼀般很少使⽤).

styleSheet  

通过 CSS 设置 widget 的样式
CSS 中可以设置的样式属性⾮常多 . 基于这些属性 Qt 只能⽀持其中⼀部分, 称为 QSS (Qt Style Sheet) . 具体的⽀持情况可以参考 Qt ⽂档中 "Qt Style Sheets Reference" 章节.

代码示例:

this -> setStyleSheet ( "background-color: #333" );
ui->textEdit-> setStyleSheet ( "background-color: #333; color: #fff;" );
ui->pushButton_light-> setStyleSheet ( "color: #fff" );
ui->pushButton_dark-> setStyleSheet ( "color: #fff" );

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值