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


相关推荐

  • 机器学习算法(一):逻辑回归模型(Logistic Regression, LR)[通俗易懂]

    机器学习算法(一):逻辑回归模型(Logistic Regression, LR)[通俗易懂]线性分类器:模型是参数的线性函数,分类平面是(超)平面;非线性分类器:模型分界面可以是曲面或者超平面的组合。典型的线性分类器有感知机,LDA,逻辑斯特回归,SVM(线性核);典型的非线性分类器有朴素贝叶斯(有文章说这个本质是线性的,http://dataunion.org/12344.html),kNN,决策树,SVM(非线性核)https://www.cnblogs.com/sparkw…

    2022年7月14日
    18
  • SpringBoot源码解析之注解

    SpringBoot源码解析之注解本文的代码基于1.5.9版本启动类中都需要添加@SpringBootApplication注解,该注解中包含了三个重要注解:1、@SpringBootConfiguration标记为springBoot应用,在这个注解中又有@Configuration表示是个注解配置。2、@EnableAutoConfiguration该注解中又包含@AutoConfigurationPackage…

    2022年6月3日
    74
  • Docker 常用命令!还有谁不会?[通俗易懂]

    Docker 常用命令!还有谁不会?

    2022年2月19日
    39
  • (三)hadoop系列之__CRT(SecureCRTPortable)的使用

    (三)hadoop系列之__CRT(SecureCRTPortable)的使用  SecureCRTPortable属于终端仿真程序,支持SSH(查看此处http://blog.csdn.net/macrossdzh/article/details/5691924)协议。利用CRT可以很方便操作虚拟机终端。进入正题……1.首先,下载SecureCRTPortable软件。2.直接执行SecureCRTPortable.exe文件即可。3.执…

    2022年5月23日
    35
  • 矩阵求秩[通俗易懂]

    矩阵求秩[通俗易懂]矩阵的秩怎么计算,这个问题一下子我居然不知道怎么下手。。虽然本科的时候学过线性代数,但是好久不用,很多东西都忘了。。今天略微梳理一下吧。最简单直观的方法:化成行最简形(或行阶梯形),然后数一下非零行数例如:将矩阵做初等行变换后,非零行的个数叫行秩将其进行初等列变换后,非零列的个数叫列秩矩阵的秩是方阵经过初等行变换或者列变换后的行秩或列秩矩阵的秩是线性代数中的一个概念。在线性代…

    2022年5月30日
    52
  • sqrt()函数的详解和用法「建议收藏」

    sqrt()函数的详解和用法「建议收藏」sqrt()函数是我们经常使用的一个函数。下面我就详细的介绍它的一些用法和使用规范所需的头文件#include<math.h>函数原型doublesqrt(doublex);作用:sqrt()用来求给定值的平方根常见的使用错误输出36的开根号忽略了sqrt()函数的返回值是double型。导致出错解决办法如下:常见的使用sqrt()函数的规范写法例如:我们要判断一个数是不是质数,只需要判断2~n开根号之间有没有可以整除的数就可以了错误的.

    2022年6月10日
    66

发表回复

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

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