Нашел информацию по eventFilter. Однако никак не могу его прописать.
Пишу в конструкторе главного виджета:
#include <qwt_plot.h>
...
...
Graphic = new QwtPlot( this, "Graphic" );
Graphic->setGeometry( QRect( 10, 110, 610, 500 ) );
Graphic->installEventFilter(new MouseFilter(&Graphic));
...
Пишу в MouseFilter.h:
#ifndef _MouseFilter_h_
#define _MouseFilter_h_
#include <qobject.h>
class MouseFilter : public QObject {
//Q_OBJECT
protected:
virtual bool eventFilter(QObject*, QEvent*);
public:
MouseFilter(QObject* pobj = 0, const char* pszName = 0);
};
#endif
Пишу в MouseFilter.cpp:
#include <qapplication.h>
#include <qmessagebox.h>
#include <qwt_plot.h>
#include "MouseFilter.h"
MouseFilter::MouseFilter(QObject* pobj, const char* pszName) : QObject(pobj, pszName)
{
}
bool MouseFilter::eventFilter(QObject* pobj, QEvent* pe)
{
if(QwtPlot::enterEvent(pe)) {
QMessageBox::information(0, "Class name", pobj->className());
return true;
}
}
Пример пытался создать по аналогии с книжкой, но там реакция на нажате клавиши была написана.
Подскажите как можно реализовать действия если мышь входит в область графика, который сам расположен на виджете?
добавлено спустя 14 минут: Изменил немного код и вроде все заработало. Пишу в конструкторе главного виджета:
#include <qwt_plot.h>
...
...
Graphic = new QwtPlot( this, "Graphic" );
Graphic->setGeometry( QRect( 10, 110, 610, 500 ) );
Graphic->installEventFilter(new MouseFilter());//изменено
...
Пишу в MouseFilter.cpp:
#include <qapplication.h>
#include <qmessagebox.h>
#include <qwt_plot.h>
#include "MouseFilter.h"
MouseFilter::MouseFilter(QObject* pobj, const char* pszName) : QObject(pobj, pszName)
{
}
bool MouseFilter::eventFilter(QObject* pobj, QEvent* pe)
{
if(pe->type() == QEvent::Enter) {
QMessageBox::information(0, "Class name", pobj->className());
return true;
}
}
Теперь отлавливает, осталось отлавливать с учетом позиции мыши и придумать что на графике можно использовать в качестве вылезающего сообщения, как "всплывающие подсказки". Но это уже дело техники