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