初学者的程序-子控件无法响应鼠标点击消息
菜鸟的程序---子控件无法响应鼠标点击消息
我想实现鼠标右键点击菜单功能,但是连鼠标响应消息都没反应,请大虾指导
我想实现鼠标右键点击菜单功能,但是连鼠标响应消息都没反应,请大虾指导
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)