我有一個重新實現的QDoubleSpinBox。我想趕上mouseDoubleClickEvent
,使用戶可以通過QInputDialog::getDouble()
更改singleStep
。捕捉QSpinBox文本字段mouseEvents
我的問題是,當我重新實現mouseDoubleClickEvent
時,我只捕獲箭頭按鈕上發生的雙擊。實際上,我希望忽略箭頭中出現的雙擊,並只捕獲文本字段中出現的雙擊。我有一種感覺,我需要重新實現QDoubleSpinBox的一個孩子的mouseDoubleClickEvent,但我不知道如何重新實現一個孩子事件,也不知道如何選擇正確的孩子看看我的嘗試限制到一個孩子QRect代碼:I認爲我需要指定哪個孩子......?
謝謝。
編輯:更正的類聲明/定義名稱不匹配。
MyQDoubleSpinBox.h
class MyQDoubleSpinBox : public QDoubleSpinBox
{
Q_OBJECT
public:
MyQDoubleSpinBox(QString str, QWidget *parent = 0);
~MyQDoubleSpinBox();
public slots:
void setStepSize(double step);
private:
double stepSize;
QString name;
protected:
void mouseDoubleClickEvent(QMouseEvent *e);
};
MyQDoubleSpinBox.cpp
#include "MyQDoubleSpinBox.h"
MyQDoubleSpinBox::MyQDoubleSpinBox(QString str, QWidget *parent)
: QDoubleSpinBox(parent), stepSize(1.00), name(str)
{
this->setMinimumWidth(150);
this->setSingleStep(stepSize);
this->setMinimum(0.0);
this->setMaximum(100.0);
}
MyQDoubleSpinBox::~MyQDoubleSpinBox()
{
}
void MyQDoubleSpinBox::setStepSize(double step)
{
this->setSingleStep(step);
}
void MyQDoubleSpinBox::mouseDoubleClickEvent(QMouseEvent *e)
{
if(this->childrenRect().contains(e->pos()))
{
bool ok;
double d = QInputDialog::getDouble(this,
name,
tr("Step Size:"),
this->singleStep(),
0.0,
1000.0,
2,
&ok);
if(ok)
this->setSingleStep(d);
}
}
甜美,像魅力一樣工作。謝謝。 – GregD 2012-07-16 14:25:26