【Qt】QWidget属性2
🏠个人主页:Yui_
🍑操作环境:Qt Creator
🚀所属专栏:Qt
文章目录
- 1. windowOpacity属性
- 2. cursor属性
- 2.1 自定义光标
- 3. font属性
- 4.tooltip属性
- 5. focusPolicy属性
- 6. 总结
由于QWidget的常见属性实在太多,不得不分为两篇文章,如果你没有看过上一篇关于QWidget属性的文章,还是推荐看一下。
1. windowOpacity属性
API | 说明 |
---|---|
windowOpacity() | 获取到控件的不透明数值,返回float,取值范围(0.0,1.0)其中0.0表示全透明,1.0表示完全不透明。 |
setWindowOpacity() | 设置控件的不透明数值 |
下面我会编写一个程序,程序中有两个按钮,一个按钮会让窗口的透明度上升一个让窗口的透明度下降。 |
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
//透明度上升
if(this->windowOpacity()>0)
{
this->setWindowOpacity(this->windowOpacity()-0.1);
}
}
void Widget::on_pushButton_2_clicked()
{
//透明度下降
if(this->windowOpacity()<1)
{
this->setWindowOpacity(this->windowOpacity()+0.1);
}
}
2. cursor属性
cursor的中文释义为光标,也就是我们的鼠标光标。
API | 说明 |
---|---|
cursor() | 获取到当前widget的cursor属性,返回QCursor对象当鼠标悬停在该widget上时,就会显示出对应的形状。 |
setCursor(const QCursor& cursor) | 设置该widget光标的形状,仅在鼠标停留在该widget上时生效。 |
QGuiApplication::setOverrideCursor(const QCursor& cursor) | 设置全局光标的形状,对整个程序中的所有widget都会生效,会覆盖setCursor设置的内容。 |
这里有一个简单的示例: | |
![]() | |
拖动一个控件,编辑右侧的属性栏即可改变光标样式。 | |
如果我们用代码写,就是这样: |
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton* button = new QPushButton(this);
button->resize(100,100);
button ->move(200,200);
button->setText("我是一个按钮~");
//设置按钮的cursor
button->setCursor(QCursor(Qt::WaitCursor));
}
Widget::~Widget()
{
delete ui;
}
按住alt点击Qt::WaitCursor
我们就可以看到系内置的光标了
除此之外,我们还可以自定义光标.
2.1 自定义光标
Qt自带的光标有限,我们也可以自己找图片,做成鼠标的光标。
我们就以这张图片为光标吧,哔哩哔哩的看板娘(不知道是22还是33~)
依旧是创建Qrc文件
创建qrc文件成功,如果你不知道如何创建qrc文件,可以去看笔者上一篇介绍qrc的文章。
#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPixmap pixmap(":/2233.png");//创建一个位图对象,加载自定义光标图片
pixmap = pixmap.scaled(64,64);//缩放图片为64*64的尺寸
//创建QCursor对象,并指定热点为(2,2)坐标位置
//这里的热点就是鼠标点击时生效的位置
QCursor cursor(pixmap,2,2);
//设置光标
this->setCursor(cursor);
}
Widget::~Widget()
{
delete ui;
}
3. font属性
API | 说明 |
---|---|
font() | 获取当前widget的字体信息,返回QFont对象 |
setFont(const QFont&font) | 设置当前widget的字体信息 |
关于QFont |
属性 | 说明 |
---|---|
family | 字体家族.⽐如"楷体",“宋体”,"微软雅⿊"等. |
pointSize | 字体⼤⼩ |
weight | 字体粗细.以数值⽅式表⽰粗细程度取值范围为[0,99],数值越⼤,越 粗. |
bold | 是否加粗.设置为true,相当于weight为75.设置为alse相当于 weight为50. |
italic | 是否倾斜 |
underline | 是否带有下划线 |
strikeOut | 是否带有删除线 |
我们用代码来演示下吧~ |
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QLabel* label = new QLabel(this);
label->setText("你好啊~");
label->move(100,100);
QFont font;
font.setFamily("微软雅黑");//设置字体家族
font.setPointSize(20);//设置字体大小
font.setBold(true);//设置字体加粗
font.setItalic(true);//设置字体倾斜
font.setUnderline(true);//设置字体下划线
font.setStrikeOut(true);//设置字体删除线
label->setFont(font);//设置字体对象到label上
}
Widget::~Widget()
{
delete ui;
}
在实际开发过程中字体的属性如何选择就不需要我们操心了,有专门的美工部门~
4.tooltip属性
API | 说明 |
---|---|
setToolTip() | 设置toolTip鼠标悬停在该widget上时会有提示说明 |
setToolTipDuring | 设置toolTip提示的时间,单位ms时间到后toolTip自动消失 |
下面我们会实现一个程序,来看看效果: |
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setToolTip("这是按钮1");
ui->pushButton->setToolTipDuration(3000);
ui->pushButton_2->setToolTip("这是按钮2");
ui->pushButton_2->setToolTipDuration(300);
}
Widget::~Widget()
{
delete ui;
}
5. focusPolicy属性
设置控件获取到焦点的策略,比如某个控件能否用鼠标选中或者能否通过tab键选中。
所谓“焦点”指的是能选中这个元素,接下来的操作(比如键盘操作)这都是针对该焦点元素进行的
这个对于输入框,单选框复选框等控件非常有用。
如果你玩过即时战略游戏,比如:魔兽争霸或者星际争霸等等,上面的事情就好比在这些游戏中先选中单位,在下达命令一样。
API | 说明 |
---|---|
focusPolicy() | 获取该Widget的focusPolicy,放回Qt::FocusPilicy |
setFocusPolicy(Qt::FocusPolicy policy) | 设置widget的focusPolicy |
Qt::FocusPolicy 是一个枚举类型,取值如下: |
Qt::Nofocus
:控件不会接收键盘焦点Qt::TabFocus
:控件可以通过Tab键接收焦点。Qt::ClickFocus
:控件在鼠标点击时接收焦点。Qt::StrongFocus
:控件可以通过Tab键和鼠标点击接收焦点。Qt::WheelFocus
:类似于Qt::StrongFocus
同时控件也通过鼠标滚轮获取到焦点(新增选项,很少使用)。
光看文字还是太抽象了,下面来用看演示吧~
首先,我们双击formfile的ui文件,拖动4个按钮到中间的框内。
在右侧的属性栏找到该数据
从上到下依次分别设置一下属性:
来看效果:
主要看黑色虚线框。
根据动图的效果我们可以得知,按钮1可以接受点击和tab键,按钮2什么都不接受,按钮3可以接受tab键,按钮4可以接受点击~
和上面设置一致~
6. 总结
本文我们又了解了许多QWidget的新属性,对于这些常见的属性大家可以好好记忆,对于不常见的属性,查文档就可以了~