QT 自定义 图形按钮+弹起效果

效果

**实现图片无边框嵌入到按钮中,以及点击后 弹起的效果+点击按钮切换按钮图片

思路

1.定义按钮类
在这里插入图片描述
注释掉原有默认构造 + 改继承
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重写按钮默认构造 声明 + 实现

    //normarImg代表正常显示图片 pressImg按下后显示的图片(默认为没有)
    MyPushbutton(QString normarImg, QString pressImg = "");//声明
    //图片路径
    QString normarImgPath;
    QString pressImgPath;

	//normarImg代表正常显示图片 pressImg按下后显示的图片(默认为没有)
	MyPushbutton::MyPushbutton(QString normarImg, QString pressImg)//实现
	{
	    this->normarImgPath = normarImg;// 接传入的图片
	    this->pressImgPath = pressImg;
	
	    //QPixmap加载图标
	    QPixmap pix;
	    bool ret = pix.load(normarImgPath);
	    if(!ret){
	        QString str = QString("图片加载失败:%1").arg(normarImg);
	        qDebug()<<str;
	        return;
	    }
	
	    //设置图片大小
	    this->setFixedSize(pix.width(), pix.height());
	
	    //设置不规则图片样式
	    this->setStyleSheet("QPushButton{border:0px;}");//0边框嵌入主图
	
	    //设置图标
	    this->setIcon(pix);
	
	    //设置图标大小
	    this->setIconSize(QSize(pix.width(), pix.height()));
	}

2.在主窗口中测试

    //开始按钮
    MyPushbutton *startBtn = new MyPushbutton(":/res/MenuSceneStartButton.png");// 传入按钮按钮图标
    startBtn->move(this->width()*0.5 - startBtn->width()*0.5, this->height()*0.7);//设置按钮图标位置
    startBtn->setParent(this);//设置按钮父窗口

实现按钮弹起效果

自定义按钮类中添加:
声明

    //向下弹起
    void zoom1();

    //向上弹起
    void zoom2();

定义

//向下弹起
void MyPushbutton::zoom1()
{
    // 创建动画对象
    QPropertyAnimation *animation = new QPropertyAnimation(this, "geometry"); //参1:需要动的对象  参2:以矩形框移动

    // 设置动画的时间间隔
    animation->setDuration(200);

    //设置动画起始位置
    animation->setStartValue(QRect(this->x(), this->y(), this->width(), this->height()));//以矩形框起始坐标+长宽设置

    //设置动画结束位置
    animation->setEndValue(QRect(this->x(), this->y()+10, this->width(), this->height()));

    //设置弹起效果
    animation->setEasingCurve(QEasingCurve::OutBounce);//搜索setEasingCurve查看其他弹起效果

    //让动画执行起来
    animation->start(QAbstractAnimation::DeleteWhenStopped);//参1:(默认是保留对象)动画停止后删除这个动画对象
}

//向上弹起
void MyPushbutton::zoom2()
{
    // 创建动画对象
    QPropertyAnimation *animation = new QPropertyAnimation(this, "geometry"); //参1:需要动的对象  参2:以矩形框移动

    // 设置动画的时间间隔
    animation->setDuration(200);

    //设置动画起始位置
    animation->setStartValue(QRect(this->x(), this->y()+10, this->width(), this->height()));

    //设置动画结束位置
    animation->setEndValue(QRect(this->x(), this->y(), this->width(), this->height()));

    //设置弹起效果
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //让动画执行起来
    animation->start(QAbstractAnimation::DeleteWhenStopped);//参1:(默认是保留对象)动画停止后删除这个动画对象
}

测试弹起效果

    //开始按钮
    MyPushbutton *startBtn = new MyPushbutton(":/res/MenuSceneStartButton.png");// 传入按钮按钮图标
    startBtn->move(this->width()*0.5 - startBtn->width()*0.5, this->height()*0.7);//设置按钮图标位置
    startBtn->setParent(this);//设置按钮父窗口

    connect(startBtn, &QPushButton::clicked, [=](){
        qDebug()<<"点击了按钮";
        startBtn->zoom1();
        startBtn->zoom2();
    });

实现 点击按钮切换按钮图片

自定义按钮类中添加:
声明

    //重写鼠标按下事件
    void mousePressEvent(QMouseEvent *e);
    //重写鼠标释放事件
    void mouseReleaseEvent(QMouseEvent *e);

实现

//重写鼠标按下事件
void MyPushbutton::mousePressEvent(QMouseEvent *e)
{
    if(pressImgPath != "")
    {
        //QPixmap加载图标
        QPixmap pix;
        bool ret = pix.load(pressImgPath);
        if(!ret){
            QString str = QString("图片加载失败:%1").arg(pressImgPath);
            qDebug()<<str;
            return;
        }

        //设置图片大小
        this->setFixedSize(pix.width(), pix.height());

        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:0px;}");//0边框

        //设置图标
        this->setIcon(pix);

        //设置图标大小
        this->setIconSize(QSize(pix.width(), pix.height()));
    }

    //点击的响应事件抛给父类
    QPushButton::mousePressEvent(e);

}

//重写鼠标释放事件
void MyPushbutton::mouseReleaseEvent(QMouseEvent *e)
{
    if(pressImgPath != "")
    {
        //QPixmap加载图标
        QPixmap pix;
        bool ret = pix.load(normarImgPath);
        if(!ret){
            QString str = QString("图片加载失败:%1").arg(normarImgPath);
            qDebug()<<str;
            return;
        }

        //设置图片大小
        this->setFixedSize(pix.width(), pix.height());

        //设置不规则图片样式
        this->setStyleSheet("QPushButton{border:0px;}");//0边框

        //设置图标
        this->setIcon(pix);

        //设置图标大小
        this->setIconSize(QSize(pix.width(), pix.height()));
    }

    //点击的响应事件抛给父类
    QPushButton::mouseReleaseEvent(e);
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt自定义控件大全Designer源码是一个包含了多种自定义控件的全套源码,它主要用于在Qt设计师中使用。Qt是一个跨平台的C++应用程序开发框架,提供了丰富的图形界面控件,但有时候我们可能需要自定义一些特殊的控件来满足我们的需求。 Qt自定义控件大全Designer源码包含了很多常用的自定义控件,如自定义按钮、进度条、滑块、验证码输入框等等。这些控件的设计和实现已经封装好,我们只需要将源码添加到我们的项目中,然后在Qt设计师中直接使用即可。 使用Qt自定义控件大全Designer源码有以下几个优点: 1.提供了丰富的自定义控件选择:Qt自定义控件大全Designer源码包含了多样化的控件,可以满足不同项目的需求。无论是一些简单的控件,还是一些复杂的控件,我们都可以找到合适的选择。 2.减少开发时间和工作量:使用源码中的自定义控件可以减少我们从头开始设计和实现的工作,节省了大量的开发时间和工作量。我们只需要将源码添加到项目中并正确配置,就可以直接在设计师中使用这些自定义控件。 3.提高应用程序的美观性和用户体验:Qt自定义控件大全Designer源码中的控件经过精心设计和实现,具有良好的界面效果和用户交互体验。使用这些自定义控件可以为我们的应用程序提供更加美观和友好的界面。 总之,Qt自定义控件大全Designer源码是一个提供了多种自定义控件的全套源码,使用它可以快速、方便地实现各种自定义控件,提高应用程序的开发效率和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值