QT版本:Qt 5.5.1 (MSVC 2013, 32 bit)
Qt Creator版本:Qt Creator 3.5.1 (opensource)
系统:win10
在用qt开发界面的过程中,如果一个dock界面里面的内容过长,就会自动生成滚动条,但滚动dock界面的过程中,如果界面里面有QSpinBox或者QComboBox的话,经常会滚动了QSpinBox,QComboBox中的数值却还不知道,造成误操作。
我们无法直接禁用QSpinBox,QComboBox的滚轮事件,只能自己重写QSpinBox,QComboBox类,更改其中的
private:
void wheelEvent(QWheelEvent *event);
函数,从而禁用滚轮事件,代码如下:
以QSpinBox为例,其他两个类跟这个基本相同。
头文件:
#ifndef MYSPINBOX_H
#define MYSPINBOX_H
#include <QWidget>
#include <QSpinBox>
#include <QDebug>
class mySpinBox : public QSpinBox
{
Q_OBJECT
public:
explicit mySpinBox(QWidget *parent = nullptr);
private:
void wheelEvent(QWheelEvent *event);
signals:
public slots:
};
#endif // MYSPINBOX_H
源文件:
#include "myspinbox.h"
mySpinBox::mySpinBox(QWidget *parent)
{
}
void mySpinBox::wheelEvent(QWheelEvent *event)
{
return;
}
然后通过代码方式添加上述几个控到界面上
mySpinBox *mySpBox = new mySpinBox();//在要用spinbox的地方用mySpBox
当然,还有一个非常简单的方法,不需要自己重写上面的类,只要在MainWindow.cpp中主类之外写下面的代码:
void QComboBox::wheelEvent(QWheelEvent *e)
{
//啥也不干,屏蔽鼠标滚动
}
void QAbstractSpinBox::wheelEvent(QWheelEvent *e)
{
//啥也不干,屏蔽鼠标滚动
}
然后程序中所有的qcombobox,qspinbox,qdoublespinbox都会被禁用鼠标滚轮事件