在实际开发过程中,有时我们往往不需要QSlider提供的快捷键功能。那么,究竟如何才能去掉QSlider中的快捷键呢? 笔者当时考虑的方法有两种,现在做下记录,以备以后查询.
1.在使用QSlider的父窗体类中,监控QSlider的事件,发现是键盘事件时,直接返回。但该种方式仅仅是通知了父窗体QSlider上有键盘事件发生,并未阻止QSlider对快捷键的响应。暂时还没有完全弄清QT内部的消息流以及对消息流的处理过程。
2.后来考虑到从QSlider派生一个新类,重写其keyPressEvent()与KeyReleaseEvent().解决该快捷键问题.代码很简单:
.h文件中
#ifndef ZQSLIDER_H
#define ZQSLIDER_H
#include <QSlider>
class ZQSlider : public QSlider
{
Q_OBJECT
public:
explicit ZQSlider(Qt::Orientation,QWidget *parent = 0);
protected:
virtual void keyPressEvent(QKeyEvent *);
virtual void keyReleaseEvent(QKeyEvent *);
signals:
public slots:
};
#endif // ZQSLIDER_H
.cpp文件中
#include "zqslider.h"
ZQSlider::ZQSlider(Qt::Orientation orientation,QWidget *parent) :
QSlider(orientation,parent)
{
}
//仅仅为了屏蔽掉QSlider的快捷键
void ZQSlider::keyPressEvent(QKeyEvent *event)
{
}
void ZQSlider::keyReleaseEvent(QKeyEvent *event)
{
}