若该文为原创文章,未经允许不得转载
原博主博客地址: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