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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • msdos分区是什么_msdos_partition

    msdos分区是什么_msdos_partition硬盘分区及格式化本例要求熟悉硬盘分区结构,使用fdisk分区工具在磁盘/dev/vdb上按以下要求建立分区:采用默认的msdos分区模式1、第1个分区/dev/vdb1的大小为200MiB2、第2个分区/dev/vdb2的大小为2000MiB3、第3个分区/dev/vdb3的大小为1000MiB,完成分区后4、能够配置开机自动挂载/dev/vdb2分区…

    2022年8月11日
    6
  • IDEA解决tomcat控制台乱码问题

    1.IDEA安装目录下的文件里面添加 -Dfile.encoding=UTF-82.如下里面也添加 -Dfile.encoding=UTF-83.Setting里面配置

    2022年2月16日
    54
  • Android下载apk异常java.net.SocketTimeoutException: timeout解决办法

    Android下载apk异常java.net.SocketTimeoutException: timeout解决办法1、问题实现下载apk的时候,抛出下面异常java.net.SocketTimeoutException:timeout2、分析很明显是socket超时了,由于我的wifi网络比较慢,设置的超时时间可能短了。在写入由GetRequestStream方法返回的流时,或在读取由GetResponseStream方法返回的流时,会用到ReadWriteTimeout属性,ReadWrite…

    2022年8月31日
    3
  • Anaconda和Pycharm安装和配置教程[通俗易懂]

    Anaconda和Pycharm安装和配置教程[通俗易懂]1、下载Anaconda2(最好选Python2.7的,兼容性好点)在官网下载:https://www.continuum.io/downloads新路径https://www.anaconda.com/distribution/2、安装Pycharm(顺便激活成功教程,不需要激活成功教程工具)默认下一步,安装好就OK了。手动配置Pycharm所用解释器3、打开“文件”—“设置”,它会自动检测…

    2022年8月27日
    4
  • characterEncodingFilter作用[通俗易懂]

    characterEncodingFilter作用[通俗易懂]characterEncoding表示编码方式,enabled表示是否启用编码,分别从初始化参数中取值。web.xml中的配置如下:如果使用的字符编码Filter、request中取出的字符可能是

    2022年7月4日
    29
  • navicat 15.0.25激活码【2022最新】

    (navicat 15.0.25激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html40ZKSWCX8G-eyJsaWNlbnNlSW…

    2022年4月2日
    196

发表回复

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

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