初学者的程序-子控件无法响应鼠标点击消息

菜鸟的程序---子控件无法响应鼠标点击消息
我想实现鼠标右键点击菜单功能,但是连鼠标响应消息都没反应,请大虾指导
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    curveWidget = new Curve_Frame(this);
    //QPushButton *curveWidge = new QPushButton(this);
    //QHBoxLayout *layout = new QHBoxLayout;
    //QWidget *centerWindow = new QWidget;
    //curveWidge->setCentralWidget(centerWindow);

    //curveWidge->setText("test!");
    //this->setGeometry(QRect(0,0,800,600));
    //layout->addWidget(curveWidge);
    //curveWidget->show();
    ui->setupUi(this);
    //this->setLayout(layout);
    //centerWindow->setLayout(layout);
}

void MainWindow::paintEvent(QPaintEvent *)
{
    //setMinimumSize(800,600);
    //setMaximumSize(800,600);
    setGeometry(QRect(200,100,1000,700));
    setFixedSize(800,600);
    curveWidget->changeBkColor(QColor(0,0,0));
    curveWidget->changeArea(QRect(0,50,width() - 100, 100));
}

MainWindow::~MainWindow()
{
    delete ui;
    delete curveWidget;
}


#include "curve_frame.h"

Curve_Frame::Curve_Frame(QWidget *parent) :
    QWidget(parent)
{
    curX = 0;
    drawTimerId = startTimer(10);
    virtualTimeId = startTimer(10);
    cursorWidth = 10;
    qDebug() <<contextMenuPolicy();
    setContextMenuPolicy(Qt::DefaultContextMenu);
    //preData = 0;
}

Curve_Frame::~Curve_Frame()
{
    killTimer(drawTimerId);
    killTimer(virtualTimeId);
}

void Curve_Frame::changeBkColor(const QColor &iColor)
{
    QPalette widgetPal = palette();

    bkColor = iColor;
    widgetPal.setColor (QPalette::Background, bkColor);

    setPalette (widgetPal);
    setAutoFillBackground(true);
}

void Curve_Frame::changeArea(const QRect & rect)
{
    setGeometry(rect);
    //qDebug() << x();
}

void Curve_Frame::paintEvent(QPaintEvent *)
{
    drawCurve();
}

void Curve_Frame::drawCurve()
{
    QPainter drawer(this);
    QPen pen;
    int i;
    int x = curX;
    int curIndex;
    //drawer.setPen(Qt::red);

    /*画波形映射缓冲中的数据*/
    pen.setColor(Qt::green);
    drawer.setPen(pen);
    curIndex = curveDataBuff.count() - 1;
    if(curIndex < 1)
    {
        /*数据不够先暂时不画*/
        curX = 0;
        return;
    }
    qDebug() << x << curveDataBuff.count();

    for(i = 1; i <= x; i++)
    {
        drawer.drawLine(i,curveDataBuff[curIndex - (x-i+1)],
                        i,curveDataBuff[curIndex - (x-i)]);
        //qDebug() << i << curveDataBuff[i]<<curveDataBuff[i-1];
    }
  #if 1
    if(curveDataBuff.count() >= width())
    {
        for(i = (width()-1); i > x; i--)
        {
            drawer.drawLine(i,curveDataBuff[i-x-1],
                            i,curveDataBuff[i-x]);
            //qDebug() << i << curveDataBuff[i]<<curveDataBuff[i-1];
        }
    }
  #endif
    drawer.fillRect(x, 0, cursorWidth, height(),Qt::black);
}

void Curve_Frame::timerEvent(QTimerEvent *event)