Russian Qt Forum
Сентябрь 30, 2024, 20:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сообщения на графике  (Прочитано 5410 раз)
Druid
Гость
« : Октябрь 06, 2006, 13:37 »

Привет. У меня qwt 5.0.0. Вывел график на экран с помощью QwtPlot. Как можно сделать, чтобы при наведении на график или при щелчке мыши на нем появлялось небольшое сообщение с координатами или другой информацией?
Записан
bigirbis
Гость
« Ответ #1 : Октябрь 06, 2006, 14:07 »

Инсталлируй eventFilter на область рисования и отлавливай QMouseEvent.
Записан
Druid
Гость
« Ответ #2 : Октябрь 06, 2006, 15:20 »

спасибо
Записан
Druid
Гость
« Ответ #3 : Октябрь 11, 2006, 09:55 »

Нашел информацию по 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 минут:

 
Цитата: "Druid"
Изменил немного код и вроде все заработало. Пишу в конструкторе главного виджета:
Код:

#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;
}
}



Теперь отлавливает, осталось отлавливать с учетом позиции мыши и придумать что на графике можно использовать в качестве вылезающего сообщения, как "всплывающие подсказки". Но это уже дело техники Улыбающийся
Записан
bigirbis
Гость
« Ответ #4 : Октябрь 11, 2006, 11:37 »

Весьма странный подход.
Код:

Graphic = new QwtPlot( this, "Graphic" );
...
Graphic->installEventFilter( this );

Код:

MyWidget::eventFilter( QObject * 0, QEvent * e )
{
 if( e.type() == QEvent::MouseMove )
 {
  ...
 }
 ...
}

Может я от жизни отстал?
Записан
Druid
Гость
« Ответ #5 : Октябрь 11, 2006, 14:38 »

хм... что-то оно не работает ((
QEvent::MouseMove
Записан
bigirbis
Гость
« Ответ #6 : Октябрь 11, 2006, 17:50 »

Это я для примера написал. На самом деле надо инсталлировать на виджет с графиком (он на плоте сверху лежит), как называется не помню (plotArea чтоли).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 21.