目录

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" );

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐