QSlider重新enterEvent

本文介绍了一个Qt对话框中自定义滑块控件的方法。通过重写滑块类并实现鼠标进入事件,可以计算鼠标点击位置相对于滑块的位置比例,并显示该比例值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

    int m_slider_x;
    int m_slider_width;

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

#include "dialog.h"
#include "ui_dialog.h"
#include <QMessageBox>
#include <QMouseEvent>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    //ui->horizontalSlider->installEventFilter(this);
    m_slider_x = ui->horizontalSlider->x();
    m_slider_width = ui->horizontalSlider->width();
}

Dialog::~Dialog()
{
    delete ui;
}


#ifndef QSUPERSLIDER_H
#define QSUPERSLIDER_H
#include <QSlider>
#include <QWidget>
#include "dialog.h"

class QSuperSlider : public QSlider
{
    Q_OBJECT
public:
    QSuperSlider(QWidget *parent = Q_NULLPTR);
    ~QSuperSlider();
protected:
    virtual void enterEvent(QEvent *event);
};

#endif // QSUPERSLIDER_H


#include "qsuperslider.h"
#include <qevent.h>
#include <QMessageBox>

class Dialog;

QSuperSlider::QSuperSlider(QWidget *parent)
    :QSlider(parent)
{

}

QSuperSlider:: ~QSuperSlider()
{

}


 void QSuperSlider::enterEvent(QEvent *event)
 {
    Dialog *pParent = (Dialog *)(this->parent());
    QPoint pot = cursor().pos();  //鼠标相对于整个屏幕的坐标
    int x   = pParent->x();       //窗体到屏幕的x坐标
    int p_x = pot.x();            //鼠标到屏幕的x坐标
    int xx = p_x-x;
    xx = xx-pParent->m_slider_x;            //得到点击的位置相对于自己控件的位置
    float d = (float)((float)xx/pParent->m_slider_width);
    float c = (float)((float)1/10);
    QString str;
    str = QString::number(d);
    QMessageBox msgBox;
    msgBox.setText(str);
    msgBox.exec();
 }


 

转载于:https://my.oschina.net/hanxiaodong/blog/1833611

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值