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;
}

效果

               缩放前                                      缩放后

        


原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/78480466

 

你可能感兴趣的:(#,Qt实用技巧)