QWidget的windowOpacity属性 | cursor属性 | font属性
一、windowOpacity属性
1. 简介
windowOpacity属性是Qt中QWindow类的一个属性。它用于设置窗口的不透明度(透明度)。
窗口的不透明度值范围是0.0到1.0之间,其中0.0表示完全透明,1.0表示完全不透明。默认情况下,窗口的不透明度为1.0,即完全不透明。
您可以使用setWindowOpacity()方法来设置窗口的不透明度。例如,以下代码将窗口的不透明度设置为0.5:
window->setWindowOpacity(0.5);
此外,您还可以使用windowOpacity()方法获取当前窗口的不透明度值。例如,以下代码将当前窗口的不透明度值打印出来:
qDebug() << window->windowOpacity();
请注意,windowOpacity属性仅适用于QWindow类的对象,而不适用于QWidget类的窗口对象。如果您正在使用QWidget类的窗口对象,请改用QWidget类的setWindowOpacity()和windowOpacity()方法。
2. API
API | 说明 |
windowOpacity() | 获取到控件的不透明数值. 返回 float, 取值为 0.0 -> 1.0 其中 0.0 表⽰全透明, 1.0 表⽰完全不透明. |
setWindowOpacity(float n) | 设置控件的不透明数值. |
3. 代码示例
示例1:调整窗口透明度
- 在界⾯上拖放两个按钮, 分别⽤来增加不透明度和减少不透明度.
- 编写 wdiget.cpp, 编写两个按钮的 slot 函数
UP 会减少不透明度, 也就是窗⼝越来越透明
DOWN 会增加不透明度, 窗⼝会逐渐恢复
执⾏程序,可以看到。点击UP增加不透明度,点击DOWN减少透明度
文件代码:
#include "widget.h" #include "ui_widget.h" #include<QDebug> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::on_pushButton_up_clicked() { //获取窗口不透明值 float opacity = this->windowOpacity(); //进行判定不透明值是否超过1.0 if(opacity >= 1.0){ return; } //打印不透明值 qDebug()<<opacity; //增加不透明度 opacity+=0.1; //设置到窗口上 this->setWindowOpacity(opacity); } void Widget::on_pushButton_down_clicked() { //获取窗口不透明值 float opacity = this->windowOpacity(); //进行判定不透明值是否小于1.0 if(opacity <= 0.0){ return; } //打印不透明值 qDebug()<<opacity; //减少不透明度 opacity-=0.1; //设置到窗口上 this->setWindowOpacity(opacity); }
二、cursor属性
1. 简介
在Qt中,QWidget类和QApplication类都提供了一个cursor属性,用于设置和获取窗口或应用程序的鼠标指针样式。该属性可用于控制鼠标在窗口上的显示效果。
常见的鼠标指针样式包括箭头、手指、等待、文本输入等。通过设置cursor属性,可以更改鼠标指针的样式。
QCursor类定义了一组预定义的光标样式,包括箭头、手指、等待、文本输入等。可以使用这些预定义样式,也可以创建自定义的光标样式。
设置窗口的cursor属性可以使用setCursor()方法,例如:
QWidget *widget = new QWidget; widget->setCursor(Qt::PointingHandCursor);
上述代码演示了Qt中的cursor属性的基本用法。通过设置和获取cursor属性,可以实现在窗口和应用程序中自定义鼠标指针的样式。
2. API
3. 系统内置的光标形状
Ctrl + 左键 点击 Qt::WaitCursor 跳转到源码即可看到.
enum CursorShape { ArrowCursor, UpArrowCursor, CrossCursor, WaitCursor, IBeamCursor, SizeVerCursor, SizeHorCursor, SizeBDiagCursor, SizeFDiagCursor, SizeAllCursor, BlankCursor, SplitVCursor, SplitHCursor, PointingHandCursor, ForbiddenCursor, WhatsThisCursor, BusyCursor, OpenHandCursor, ClosedHandCursor, DragCopyCursor, DragMoveCursor, DragLinkCursor, LastCursor = DragLinkCursor, BitmapCursor = 24, CustomCursor = 25 }
4. 代码示例
示例1:在Qt Designer中设置按钮的光标
- 在界⾯中创建⼀个按钮,直接在右侧属性编辑区修改 cursor 属性为 “等待”
- 运行程序, 鼠标悬停到按钮上, 即可看到光标的变化 (window11的等待效果)
示例2:通过代码设置按钮的光标
- 设置一个按钮并进行设置大小及位置,其中 Qt::WaitCursor 就是⾃带的沙漏形状的光标.
- 运⾏程序, 观察效果.
文件代码:
#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(300,150); //修改按钮在界面中的位置 button->move(200,100); //设置按钮的文本 button->setText("按钮"); //设置按钮的cursor属性 button->setCursor(QCursor(Qt::WaitCursor)); } Widget::~Widget() { delete ui; }
示例3:自定义鼠标光标
- Qt ⾃带的光标形状有限,可以自己找图片,做成鼠标光标。以下图为例图片来自阿里巴巴矢量图标库
- 创建 qrc 资源⽂件, 添加前缀 / , 并加⼊ dianzan.png 详细步骤参考:qrc文件机制
- 编写 widget.cpp
热点:鼠标点击时生效的位置,类似于箭头的尖尖
- 运⾏程序, 观察效果
文件代码:
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); // 创建⼀个位图对象, 加载⾃定义光标图⽚ QPixmap pixmap(":/dianzan.png"); // 缩放图⽚为 64 * 64 的尺⼨ pixmap =pixmap.scaled(64,64); // 创建 QCursor 对象, 并指定 "热点" 为 (2, 2) 坐标位置. // 所谓 "热点" 就是⿏标点击时生效的位置,类似于箭头的尖尖 QCursor cursor(pixmap,2,2); // 设置光标 this->setCursor(cursor); } Widget::~Widget() { delete ui; }
三、font属性
1. 简介
在Qt中,font属性用于设置控件的字体样式。每个Qt控件都有一个font属性,用于设置控件的字体。
在Qt中,可以使用以下方法来设置控件的字体:
- 使用控件自己的setFont方法来设置字体,例如:这将将按钮的字体设置为Arial字体,大小为12。
QPushButton* button = new QPushButton("Button"); button->setFont(QFont("Arial", 12));
- 使用样式表(QSS)来设置字体,例如:这将将所有QPushButton控件的字体设置为Arial字体,大小为12。
QPushButton { font-family: Arial; font-size: 12px; }
- 使用控件的QPalette对象来设置字体,例如:这将将按钮的字体设置为Arial字体,大小为12。
QPushButton* button = new QPushButton("Button"); QPalette palette = button->palette(); palette.setFont(QFont("Arial", 12)); button->setPalette(palette);
总之,Qt中的font属性可以通过控件自带的方法、样式表或QPalette对象来设置,可以自由选择最适合的方法来设置控件的字体样式。
2. API
API | 说明 |
font() | 获取当前 widget 的字体信息. 返回 QFont 对象. |
setFont(const QFont& font) | 设置当前 widget 的字体信息 |
3. QFont各属性说明
4. 代码示例
示例1:在Qt Designer中设置字体属性
- 创建一个label标签,在右侧的属性编辑区, 设置该 label 的 font 相关属性
- 通过修改右边font的属性,来改变label里的文本
- 执行程序,运行结果
示例2:在代码中设置字体属性
- 在界⾯中创建 label,并修改font属性,设置到label
- 执行代码,运行结果
文件代码:
#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的文本内容 label->setText("这是一段文本"); //改变label的位置 label->move(200,300); //创建字体对象 QFont font; //设置字体家族 font.setFamily("楷体"); //设置字体大小 font.setPixelSize(20); //设置字体加粗 font.setBold(true); //设置字体倾斜 font.setItalic(true); //设置字体下划线 font.setUnderline(true); //设置字体删除线 font.setStrikeOut(true); //设置字体对象到label上 label->setFont(font); } Widget::~Widget() { delete ui; }