当前位置: 首页 > news >正文

QT-常用类

Qt常用类

  1. 图像处理类
  2. 字体处理类
  3. 尺寸处理类
  4. 图标处理类
  5. 定时器类

一、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 应用中,可以使用 QLabelQPushButton等控件结合使用来显示图片。

使用 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、应用字体

应用字体到控件,如QLabelQPushButton等:

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 信号
}
http://www.dtcms.com/a/347214.html

相关文章:

  • 【GPT入门】第57课 详解 LLamaFactory 与 XTuner 实现大模型多卡分布式训练的方案与实践
  • calchash.exe和chckhash.exe计算pe文件hash值的两个实用小工具
  • 【Linux系统】命名管道与共享内存
  • 结构化数据与非结构化数据的区别、特点和应用场景
  • Games 101 第四讲 Transformation Cont(视图变换和投影变换)
  • Java22 stream 新特性 窗口算子:GathererOp 和 GatherSink
  • Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
  • 权限管理模块
  • 用 Ansible 优雅部署 Kubernetes 1.33.3(RedHat 10)
  • 第一章:启航篇 —— 新晋工程师的生存与扎根 (1)
  • TensorFlow 深度学习 开发环境搭建
  • 通过Java连接并操作MySQL数据库
  • 多智能体篇:智能体的“语言”——ACL协议与消息队列实现
  • 高斯分布的KL散度计算
  • STM32学习笔记19-FLASH
  • 标准浪涌测试波形对比解析
  • linux内核 - vmalloc 介绍
  • Unity 字符串输出文字一样但Equals 判断为false
  • 图论与最短路学习笔记
  • CH2 线性表
  • LeetCode 分类刷题:2529. 正整数和负整数的最大计数
  • IDEA控制台乱码(Tomcat)解决方法
  • 2-4.Python 编码基础 - 流程控制(判断语句、循环语句、break 语句与 continue 语句)
  • MySQL存储过程详解
  • `strlen` 字符串长度函数
  • GEO优化服务:智能时代的全球竞争新赛道
  • VS Code 中创建和开发 Spring Boot 项目
  • python企微发私信
  • Text2API与Text2SQL深度对比:自然语言驱动的数据交互革命
  • 【40页PPT】数据安全动态数据脱敏解决方案(附下载方式)