QT-常用类
Qt常用类
- 图像处理类
- 字体处理类
- 尺寸处理类
- 图标处理类
- 定时器类
一、QPixmap
QPixmap
是 Qt 框架中用于处理图像的一个核心类。用于处理图像,提供了对图像的操作功能,比如加载、保存、转换格式等。
1、加载图像
可以使用 QPixmap
的构造函数或 load()
方法来加载一个图像。
QPixmap pixmap("path/image.png");
if (pixmap.isNull()) { // 处理加载失败的情况
}
或者
QPixmap pixmap;
if (!pixmap.load("path/image.png")) { // 处理加载失败的情况
}
2、显示图像
在 Qt Widgets 应用中,可以使用 QLabel
或QPushButton
等控件结合使用来显示图片。
使用 QLabel
显示图像:
QLabel label;
label.setPixmap(pixmap);
3、图像转换
缩放图片:使用scaled()
方法可以改变图片的尺寸。
QPixmap scaledPixmap = pixmap.scaled(100, 100); // 缩放到100x100像素
旋转图片:通过transformed()
方法配合QTransform
可以实现图片的旋转。
QTransform rotateTransform;
rotateTransform.rotate(90); // 设置旋转角度为 90 度
QPixmap rotatedPixmap = pixmap.transformed(rotateTransform); // 让 pixmap 应用旋转变换
示例:
#include "form.h"
#include "ui_form.h"
#include <QPixmap> // 图片类
#include <QLabel> // 标签控件类,用于显示文本或图片
#include <QHBoxLayout> // 水平布局管理器
#include <QPushButton> // 按钮类Form::Form(QWidget *parent) // Form类的构造函数,parent是父窗口: QWidget(parent) // 初始化基类 QWidget, ui(new Ui::Form) // 初始化 UI 指针
{ui->setupUi(this); // 设置 UI 界面(Qt Designer 生成的)// 缩放QPixmap pixmap(":/checkbox_checked.png"); // 从资源文件加载图片pixmap = pixmap.scaled(20, 20); // 缩放成 20x20 大小// 旋转QTransform t; // 定义一个变换矩阵t.rotate(90); // 设置旋转角度为 90 度pixmap = pixmap.transformed(t); // 让 pixmap 应用旋转变换QLabel *qlabel = new QLabel; // 新建一个 QLabel 用于显示图片qlabel->setPixmap(pixmap); // 设置标签显示旋转后的图片
}
二、QFont
QFont
类用于描述字体属性,如字体族(family)、大小(point size)、粗细(weight)和斜体(italic)等。
可以使用 QFont
来设置文本控件(如 QLabel
, QPushButton
, QTextEdit
等)中的字体样式。
1、创建和设置字体
QFont font("Microsoft YaHei", 12, QFont::Bold); //创建了一个 Microsoft YaHei 字体,大小为 12 点,加粗。
或
QFont font("Microsoft YaHei", 12); // 创建一个Microsoft YaHei字体,大小为12px
font.setBold(true); // 设置字体为粗体
font.setItalic(true); // 设置字体为斜体
常见字体:宋体 SimSun、黑体 SimHei、微软雅黑 Microsoft YaHei、微软正黑体 Microsoft JhengHei、楷体 KaiTi。
2、应用字体
应用字体到控件,如QLabel
、QPushButton
等:
QLabel *label = new QLabel("Hello, World!", this);
label->setFont(font);
3、示例
Form::Form(QWidget *parent) // 构造函数,接收父窗口指针: QWidget(parent) // 初始化父类 QWidget, ui(new Ui::Form) // 初始化 UI 对象
{ui->setupUi(this); // 设置 UI 界面(加载 Qt Designer 生成的界面)this->setWindowTitle("字体处理"); // 设置窗口标题为 "字体处理"QLabel *label = new QLabel("这里是标签"); // 创建一个标签并设置初始文本label->setFont(QFont("KaiTi", 24)); // 设置标签字体为 楷体,字号 24QPushButton *btn = new QPushButton("按钮"); // 创建一个按钮,文字是 "按钮"QFont font("黑体", 24); // 创建一个 QFont 对象,设置字体为黑体,字号 24font.setBold(true); // 设置字体加粗btn->setFont(font); // 将字体应用到按钮上
}
- 最常用的就是:
QFont("字体名", 字号)
QFont("字体名", 字号, 粗细, 是否斜体)
- 其他样式(如下划线、删除线、字间距等)需要用 成员函数 设置,例如:
font.setUnderline(true); // 下划线
font.setStrikeOut(true); // 删除线
font.setItalic(true); // 斜体
font.setWeight(QFont::Bold); // 加粗
三、QSize
QSize
类用来表示一个二维尺寸,通常用于指定窗口或控件的宽度和高度。
1、创建和使用
QSize size(100, 50); // 创建一个尺寸为100x50的QSize对象
在调整控件大小时使用:
QWidget *widget = new QWidget(this);
widget->resize(QSize(宽度,高度));
2、示例
Form::Form(QWidget *parent) // 构造函数,参数 parent 指定父窗口(默认是空): QWidget(parent) // 调用 QWidget 的构造函数,并把 parent 传递进去, ui(new Ui::Form) // 创建 UI 对象(Qt Designer 生成的界面类)
{ui->setupUi(this); // 绑定 UI 到当前窗口(初始化界面控件)this->setWindowTitle("尺寸处理"); // 设置窗口标题为 "尺寸处理"this->resize(QSize(300,200)); // 设置窗口初始大小:宽 300,高 200QLineEdit *edit = new QLineEdit(this); // 创建一个单行文本框 QLineEdit,并指定父控件为当前窗口edit->setMinimumSize(QSize(200, 24)); // 设置文本框的最小尺寸,宽 200,高 24
}
四、QIcon
QIcon
类用于管理图标集,这些图标可以被用于按钮、菜单项、工具栏按钮等 UI 元素上。可以从文件加载图标或者使用QPixmap
创建图标。
1、加载和设置图标
QIcon icon(":/icons/myicon.png"); // 从资源文件加载图标
2、将图标应用到控件
QIcon icon(":/icons/my_icon.png"); // 从资源文件加载图标
QPushButton *button = new QPushButton(this);
button->setIcon(icon); // 将图标设置给按钮
3、图标大小调整
可以在使用时通过setIconSize()
方法调整图标大小:
button->setIconSize(QSize(32, 32)); // 设置图标尺寸为32x32像素
给按钮添加图标:
Form::Form(QWidget *parent) // 构造函数,参数 parent 指定父窗口(默认是空): QWidget(parent) // 调用 QWidget 的构造函数,并把 parent 传递进去, ui(new Ui::Form) // 创建 UI 对象(Qt Designer 生成的界面类)
{ui->setupUi(this); // 初始化并加载 Qt Designer 设计的 UI 界面this->setWindowTitle("图标处理"); // 设置窗口标题为 "图标处理"this->resize(QSize(300,200)); // 设置窗口初始大小:宽 300,高 200QPushButton *btn = new QPushButton(this); // 创建一个按钮,父控件是当前窗口btn->setText("按钮"); // 设置按钮上的文字为 "按钮"btn->resize(QSize(100, 24)); // 设置按钮大小:宽 100,高 24QIcon icon(":/checkbox_checked.png"); // 从资源文件中加载图标(路径以 :/ 开头代表 Qt 资源)btn->setIcon(icon); // 给按钮设置图标btn->setIconSize(QSize(14,14)); // 设置按钮图标显示的大小:宽 14,高 14
}
五、QTimer
QTimer
类提供了定时触发事件的功能,常用于实现周期性任务或延时执行某个操作。
可以将 QTimer
设置为单次触发或重复触发,并且可以通过信号槽机制连接到特定的槽函数来处理定时事件。
1、创建QTimer实例
父对象被销毁时,QTimer也会自动清理。
QTimer *timer = new QTimer(parent);
2、连接timeout()信号
QTimer提供了一个timeout()
信号,这个信号在设定的时间间隔到期时发射
connect(timer, &QTimer::timeout, this, &MyClass::onTimeout);
3、设置时间间隔并启动
使用start()
方法来启动定时器,并指定时间间隔(以毫秒为单位)
// 设置为单次触发
timer->setSingleShot(true);
timer->start(1000); // 每隔 1000 毫秒(即 1 秒)触发一次timeout信号
4、停止定时器
使用stop()
方法停止定时器
timer->stop(); // 停止定时器
5、实现显示当前时间功能,点击“开始” 按钮,点击“停止” 按钮
time = new QTimer; // 创建一个 QTimer 定时器对象(用于定时触发信号)// 连接定时器的 timeout 信号,每次定时器溢出时执行 lambda 表达式
connect(time, &QTimer::timeout, this, [=](){ui->label->setText(QTime::currentTime().toString()); // 更新标签为当前系统时间
});// 点击“开始”按钮的槽函数
void MainWindow::on_pushButton_start_clicked()
{time->start(1000); // 启动定时器,间隔 1000ms(即 1 秒触发一次 timeout 信号)
}// 点击“结束”按钮的槽函数
void MainWindow::on_pushButton_end_clicked()
{time->stop(); // 停止定时器,不再触发 timeout 信号
}