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)
上一篇 2022年6月11日 下午2:36
下一篇 2022年6月11日 下午2:36


相关推荐

  • 为什么我用LaTeX排版的那个双引号编译出来很奇怪,如下图,怎么做才能出现对的?[通俗易懂]

    为什么我用LaTeX排版的那个双引号编译出来很奇怪,如下图,怎么做才能出现对的?[通俗易懂]为什么我用LaTeX排版的那个双引号编译出来很奇怪,如下图,怎么做才能出现对的?)我是个LaTeX小白,百度了很久,没有解决办法,求救。引号是在英文输入法下输的,左引号连按两次esc下边那个键,右引号连按两次enter左边那个键。…

    2022年6月25日
    31
  • 2020阿里笔试编程题[通俗易懂]

    2020阿里笔试编程题[通俗易懂]选择题很难做,阿里的秋招貌似非常难,大部分岗位都留给了实习生,但是两道编程题不怎么难。第一题有一个n*n的地图,一只兔子想要穿过这个地图,给出的地图是一个二维数组map[i][j],数值表示该位置的毒雾持续时间,当兔子在(x,y)位置时,它可以跳到(x+2,y)或者(x,y+2)位置,跳的时候需要对应等待map[x+1][y]或者map[x][y+1]的时间,兔子开始跳的位置从map[1][1…

    2022年5月23日
    31
  • 常用JS——string字符串方法

    常用JS——string字符串方法一 关于字符串分割 1 slice start end 关于这个方法 一定要搞懂四个关键点 1 截取字符串时不包括下标为 end 的元素 2 end 是可选参数 没有时 默认从 start 到结束的所有字符串 3 String slice 与 Array slice 区别 4 参数为负数时 是如何处理的 其中第 3 点其实就是在 JavaScript 中字符串和数组都具有这个方法 它们

    2026年3月19日
    2
  • java保留两位小数不四舍五入_java截取两位小数

    java保留两位小数不四舍五入_java截取两位小数首先让我们来定义三个变量 doublex=5.112; doubley=5.118; doublez=5.1; 前两个用于演示四舍五入, 最后一个用于演示一位小数的情况方法一:使用String.format方法(四舍五入) System.out.println(String.format(“%.2f”,x)); System.out.println(S…

    2026年3月10日
    7
  • 什么是网站死链?如何查询网站死链?网站死链怎么解决?[通俗易懂]

    什么是网站死链?如何查询网站死链?网站死链怎么解决?[通俗易懂]网页死链:简单地讲,死链接指原来正常,后来失效的链接。死链接发送请求时,服务器返回404错误页面。死链出现原因1、动态链接在数据库不再支持的条件下,变成死链接。2、某个文件或网页移动了位置,导致指向它的链接变成死链接。3、网页内容更新并换成其他的链接,原来的链接变成死链接。4、网站服务器设置错误5、网站还没有完全做好,就上传到服务器上去了,这样也很多死链的。6、某文件夹名称修改,路

    2022年7月22日
    15
  • java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]

    java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]Java中的SortedSet接口的headSet()方法用于返回此集合中其元素严格小于参数toElement的部分的视图。此方法返回的集合由该集合支持,因此返回集合中的更改会反映在该集合中,反之亦然。此方法返回的set支持此set支持的所有可选set操作。注意:如果试图插入超出其范围的元素,则此方法返回的集合将引发IllegalArgumentException。用法:SortedSethea…

    2022年8月31日
    6

发表回复

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

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