有时候我们需要实现动态按钮,即三态按钮,默认一个状态,鼠标悬浮一个状态,点击时一个状态,有时候还包含禁用状态。关于三态按钮的制作详见:Qt实现自定义按钮的三态效果
当每个状态对应一张单独的图片时很好处理,那么当所有图片都在一张png长图上,如何切割分配给每个状态呢?最先想到的是用QPixmap加载该png并拷贝特定部分:
ui->pushButton->setStyleSheet("background:transparent; border:0px;");
QPixmap pixmap(":/icons/button.png");
int width = pixmap.width()/4;
int height = pixmap.height();
int currentSection = 0;// 当前在png长图的哪一段.
ui->pushButton->setIcon(QIcon(pixmap.copy(QRect(currentSection * width, 0, width, height))));
ui->pushButton->setIconSize(QSize(width, height));
不过还有一种更简单的方法,用QSS分段截取。
这是png长图
这是效果图