Qt实用技巧:代码中QIcon缩放(QPixmap的手动放大和QIcon自动缩小)

简介: Qt实用技巧:代码中QIcon缩放(QPixmap的手动放大和QIcon自动缩小)

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/78480466

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:实用技巧(点击传送门)

 

需求

       需要2个按钮,一个是音乐的开关,一个是关闭窗口,此文章主要关注图标缩放的问题

 

相关

       《Qt实用技巧:Qt设计器中QIcon的缩放(qss的放大和QIcon自动缩小(无法自动放大))》:

        https://blog.csdn.net/qq21497936/article/details/80036551

 

原理

       QPushButton可以设置无内容,其本身带有QIcon,那么使用QIcon缩放即可

 

入坑

       代码如下:

ui->pushButton_music->setIcon(QIcon(QPixmap("./按钮/sound.png").scaled(ui->pushButton_music->rect().size())));

结果:不生效,添加参数也无效

       原因:QIcon会自动放大缩小QPixmap,所以我们只要设置要QPixMap,然后重新设置QIcon大小即可。

 

代码

初始化代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 加载声音图标和退出图标,注意:图标的缩放依赖于控件设置QIcon的大小,与QPixmap无直接关系
    _playingMusic = true;
    ui->pushButton_music->setIconSize(ui->pushButton_music->rect().size());
    ui->pushButton_close->setIconSize(ui->pushButton_close->rect().size());
    // 原本是想QPixmap缩放,然后设置QIcon,QIcon会以QPixmap的size为大小
    // 经过测试QPixmap缩放后,还是以QIcon的size为结果,故此处多余,替换此处代码
    // 方式一: 如果 icon 小于 QIcon 尺寸,此方法将图片放大
    ui->pushButton_music->setIcon(QIcon(QPixmap("./按钮/sound.png").scaled(ui->pushButton_music->rect().size())));
    ui->pushButton_close->setIcon(QIcon(QPixmap("./按钮/close.png").scaled(ui->pushButton_close->rect().size())));
    // 方式二: 如果 icon 大于或等于 QIcon 尺寸, 直接使用QIcon(QStirng str)可自动缩放到QIcon的尺寸,但无法放大
//    ui->pushButton_music->setIcon(QIcon("./按钮/sound.png"));
//    ui->pushButton_close->setIcon(QIcon("./按钮/close.png"));
}

声音切换代码

void MainWindow::on_pushButton_music_clicked()
{
    if(_playingMusic)
    {
        ui->pushButton_music->setIcon(QIcon(QPixmap("./按钮/no_sound.png").scaled(ui->pushButton_music->rect().size())));
    }
    else
    {
        ui->pushButton_music->setIcon(QIcon(QPixmap("./按钮/sound.png").scaled(ui->pushButton_music->rect().size())));
    }
    _playingMusic = !_playingMusic;
}

效果

              缩放前                                      缩放后

图片.png        图片.png

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/78480466

 



相关文章
|
7月前
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
【Qt 学习笔记】使用QtCreator创建及运行项目 | 项目初始代码解释
1118 1
|
7月前
QT中按钮格式QSS代码
QT中按钮格式QSS代码
|
7月前
|
存储 测试技术 UED
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
179 1
|
4月前
|
XML Linux 程序员
【Qt】项目代码
【Qt】项目代码
|
7月前
QT实现植物大战僵尸中文版工具代码
QT实现植物大战僵尸中文版工具代码
|
7月前
使用代码实现QT自定义布局
使用代码实现QT自定义布局
|
7月前
Qt 按行追加文本代码
Qt 按行追加文本代码
82 0
|
7月前
|
IDE 开发工具 C语言
QT案例IDE编写 -- 代码编写
QT案例IDE编写 -- 代码编写
79 0
|
7月前
|
开发框架 监控 安全
电脑内网监控软件的跨平台支持:使用Qt实现的C++代码
在当今数字化时代,对于网络安全的关注越来越高。为了确保企业和个人的网络安全,监控内网活动变得至关重要。本文将介绍一种基于Qt框架实现的C++代码,用于开发跨平台的内网监控软件。
296 0
|
7月前
|
编解码 区块链 Windows
QT基础教程(QPalette和QIcon)
QT基础教程(QPalette和QIcon)
168 0