自定义部件外观基础,例如QPushButton背景图片

4 篇文章 0 订阅

#ifndef M_H

#define M_H

#include

class B:public QPushButton{

Q_OBJECT

public: bool b; //用于存储鼠标光标进入或离开按钮的状态

bool press; //用于存储按钮是否被按下的状态

B(QString s,QWidget *p1=0):QPushButton(s,p1){ b=0; press=0;}

void mousePressEvent(QMouseEvent *e){ press=1; //保存按钮被按下的状态

update(); //更新按钮,此步不可缺少,否则按钮外观不会即时更新。 QPushButton::mousePressEvent(e);};

void mouseReleaseEvent(QMouseEvent *e){ press=0; //按钮未被按下

update(); QPushButton::mouseReleaseEvent(e); };

void enterEvent(QEvent *event){

b=1; //保存鼠标进入按钮的状态

update(); QPushButton::enterEvent(event); }

void leaveEvent(QEvent *event){

b=0; //鼠标离开按钮的状态

update(); QPushButton::leaveEvent(event); }

void paintEvent(QPaintEvent *e){ //自定义绘制按钮的外观

QPainter pr(this); QBrush bs(QColor(111,111,111)); //灰色

QPen pn(Qt::DotLine); //此画笔主要用于绘制焦点框

pn.setColor(QColor(1,111,1));

pn.setWidth(4); QRect r=rect(); //获取设置的按钮的大小。

if(b==0){ //若鼠标离开按钮

pr.fillRect(r,bs); //使用画刷 bs(灰色)填充按钮的背景,其大小为 r //绘制按钮上的文本,使用 text()函数获取设置的按钮的文本。

pr.drawText(r,Qt::AlignCenter,text());}

if(b==1){ pr.fillRect(r,QColor(111,1,1)); //红色背景

pr.drawText(r,Qt::AlignCenter,text()); }

if(b==1&&press==1){ //光标进入按钮且按钮被按下

pr.fillRect(r,QColor(222,222,222));

pr.drawText(r,Qt::AlignCenter,text());}

if(b==0&&press==0){ //光标离开按钮且按钮未被按下

pr.fillRect(r,bs); pr.drawText(r,Qt::AlignCenter,text());}

if(hasFocus()) {//按钮获得焦点 pr.setPen(pn);

pr.drawRect(r.adjusted(1,1,-2,-2)); } //绘制一个矩形边框

}

};

#endif // M_H

可以将pr.fillRect(r,bs);换成pr.drawPixmap(e->rect(), background);//QPixmap background;是图片

不想重写控件的话可以看重写样式的那篇内容(重写样式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值