QT 多种状态的背景图片, 放在同一张图上, border-image 进行分割,拉伸

大部份时候的图片是进行了分割,也就是一个控件,背景对应一张状态图片,   当然, 也有意外就是, 有些美工为了省时, 或者说项目为了节省空间,把一个按纽的多种状态的图片放在一张图片上, 这时加载方式就有点不一样了:


  比如说, 这个四张不同状态的图放在了一张图上面。 


我们的处理方法为:


#include "widget.h"
#include "ui_widget.h"
 
const int Widget::PictureHeight = 176;
const int Widget::Average = (int)176/4;
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    initButtonImage();
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::on_toolButton_clicked()
{
     setStyleSheet(QString("#testButton {border-image:url(%1)%2 0 %3 0}")
                   .arg(":/images/install.png")
                   .arg(0)
                   .arg(PictureHeight - Average)
                   );
}
 
void Widget::on_toolButton_hover_clicked()
{
     setStyleSheet(QString("#testButton {border-image:url(%1) %2 0 %3 0}")
                   .arg(":/images/install.png")
                   .arg(Average)
                   .arg(PictureHeight - Average*2)
                   );
}
 
void Widget::on_toolButton_pressed_clicked()
{
    setStyleSheet(QString("#testButton {border-image:url(%1) %2 0 %3 0}")
                  .arg(":/images/install.png")
                  .arg(Average*2)
                  .arg(PictureHeight - Average*3)
                  );
}
 
void Widget::on_toolButton_disabled_clicked()
{
    setStyleSheet(QString("#testButton {border-image:url(%1) %2 0 %3 0}")
                  .arg(":/images/install.png")
                  .arg(Average*3)
                  .arg(0)
                  );
}
 
void Widget::initButtonImage()
{
    setStyleSheet(QString("#testButton {border-image:url(%1)0 0 132 0}")
                  .append("#testButton:hover:!pressed {border-image:url(%1)44 0 88 0}")
                  .append("#testButton:hover {border-image:url(%1)88 0 44 0}")
                  .append("#testButton:disabled {border-image:url(%1)132 0 0 0}")
                  .arg(":/images/install.png")
                  );
}
 
 
解释一下大概意思:
#testButton {border-image:url(%1) %2 0 %3 0}  这里是QSS 样式的代码, 都短道, 最主要的是后面四个参数, 它们分别代表一张图的 上 右 下 左, 即为
上: 离顶端的距离  下: 离底部的距离
左: 离左边框的距离  右:离右边框的距离

而有四张图合为一张图的, 如果中间没有间距每张图高度相同的话, 为大图的高度/4

拿第张图来讲,它的分割应该为 3倍离底部的平均高度。 
第二张图为从离顶1张小图的高度切割, 再从离底两张图的高度进行分割。 
剩下的两张同样的道理。

 
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值