Qt播放器之自定义按钮

Qt播放器之自定义按钮一、前言在做播放器时,Qt自带的按钮部件虽然很强大,但是显示效果还是不能令人满意。于是决定自定义一个简单的按钮部件。按钮部件只简单的显示按下、释放两个状态,并且只发出clicked()信号。基本功能如下:   当按下时显示一个按下的图标;   当释放时显示另一

大家好,又见面了,我是你们的朋友全栈君。

一、前言

在做播放器时,Qt自带的按钮部件虽然很强大,但是显示效果还是不能令人满意。于是决定自定义一个简单的按钮部件。按钮部件只简单的显示按下、释放两个状态,并且只发出clicked()信号。
基本功能如下:
    当按下时显示一个按下的图标;
    当释放时显示另一个释放的图标,并且发出clicked()信号;
二、程序代码

//button.h

#ifndef BUTTON_H
#define BUTTON_H
#include <QPixmap>

class Button:public QWidget
{

    Q_OBJECT
public:
    Button(QWidget *parent, QPixmap pressed_pixmap, QPixmap released_pixmap);
signals:
    void clicked();
private:
    QPixmap m_pressed;
    QPixmap m_released;

    bool pressed;

protected:
    void mousePressEvent(QMouseEvent *);
    void mouseReleaseEvent(QMouseEvent *);
    void paintEvent(QPaintEvent *);
};

#endif // BUTTON_H

说明:在创建按钮时提供两个图标,一个是按下的,一个是释放的;

//button.cpp

#include “button.h”
#include <QPainter>

Button::Button(QWidget *parent, QPixmap normal_pixmap, QPixmap released_pixmap)
    :QWidget(parent),m_normal(normal_pixmap),m_released(released_pixmap),pressed(false)
{

    update(); //调用update(),引发重绘事件,调用paintEvent()事件处理函数
}

void Button::mousePressEvent(QMouseEvent * e)
{

    pressed=true;
    update();
}

void Button::mouseReleaseEvent(QMouseEvent *e)
{

    pressed=false;
    update();
    emit(clicked());
}

void Button::paintEvent(QPaintEvent *e)
{

    QPainter painter(this);

    if(pressed)
    {

        resize(m_normal.size());
        painter.drawPixmap(0,0,m_normal);
    }
    else
    {

        resize(m_released.size());
        painter.drawPixmap(0,0,m_released);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132008.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 最强的疯狂java学习路线图,javaEE学习者必看「建议收藏」

    最强的疯狂java学习路线图,javaEE学习者必看「建议收藏」转载于:https://www.cnblogs.com/order/archive/2012/10/20/2732602.html

    2022年6月15日
  • python实现QQ和微信刷屏[通俗易懂]

    python实现QQ和微信刷屏[通俗易懂]python实现QQ和微信刷屏看过一些用来刷屏的程序,要么就只能刷屏QQ,要么就只能刷屏微信,今天博主就来把它一起实现了,而且用法超简单的哦!!!,希望可以帮助到你!废话不多说,先上代码,然后再进行详细介绍!!!frompynputimportmouse,keyboardfromtkinterimport*importtkinter.filedialogimporttimeroot=Tk()root.title(“信息刷屏”)root.geometry(“550×200

    2022年6月11日
  • select2 api参数的文档

    select2 api参数的文档

    2021年11月9日
  • 锂电池3V升12V(AH6901)低成本替代6291升压芯片

    锂电池3V升12V(AH6901)低成本替代6291升压芯片锂电池3V升12V(AH6901)低成本替代6291升压芯片应用于数码相机,移动电源,蓝牙音箱,插卡音箱、LED台灯便捷DVD,MID,移动电话等数码产品AH6901是一款小封装(SOT23-6)、CC(恒流)模式的PWM升压IC,适用于锂电池(3~4.2V)输出5V,1A的移动电源应用。AH6901输入电压范围可由最低2.6伏特到最高6伏特,输出电压3.3–20V可调整且内部MOS输出开关电流可高达2A,封装为SOT23-6,工作频率为1MHZ,可以搭配3.3uh小型贴片电感,减少成品体积,非常适

    2022年10月6日
  • Qt 5.14.1 安装详解「建议收藏」

    Qt 5.14.1 安装详解「建议收藏」1、打开安装包qt-opensource-windows-x86-5.14.1.exe,next2、这里需要登录(点击这里注册:https://www.qt.io/)3、选择同意,下一步,下一步4、选择安装目录(需要大约3.2G的空间大小)5、选择组件(非常重要)6、同意许可协议,点击下一步,安装…

    2022年5月13日
  • MySQL把字符串转化为数字的三种方式[通俗易懂]

    MySQL把字符串转化为数字的三种方式[通俗易懂]问题出现当我用navicat查询时,在varchar字段上where查询使用的是int类型的0【忘记打引号了…】,结果查出一堆其他的字符串,很奇怪。首先,我想到的是类似于betweenand,我以为也是比较的首字母,不过后面我发现并不是的。百度搜素之后发现是在这查询的时候MySQL把字符串转化为数字,并且有几种方式:1.方法一:字段值+0MySql会根据上下文自动转换类型,这里会将被本来是字符类型的字段值以数值型返回,如果字段存放的值为数值字符,则会转换为数值型返回,如果字段存

    2022年5月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号