crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Перемещение мыши над QGraphicsView
RazrFalcon
  опции профиля:
сообщение 23.3.2011, 23:39
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Главное(и единственное) окно - наследник QGraphicsView.
Но, mouseMoveEvent срабатывает только при нажатии ЛКМ, setMouseTracking(true); - не помогло.
Нужно отловить положение мышки относительно QGraphicsView/QGraphicsScene.

PS: проблема в том, что кроме QGraphicsView у меня должны быть и другие элементы на форме, но тогда я не могу перехватить положение мыши...
То есть, если главное окно наследник QMainWindow, то как отловить положение мыши над QGraphicsView?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 24.3.2011, 0:08
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


а что хочешь делать с этим MoveEvent?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.3.2011, 8:10
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


наверное

void QWidget::setMouseTracking ( bool enable )

сорри, невнимательно прочитал - уже пробовалось, оказывается

Сообщение отредактировал Алексей1153 - 24.3.2011, 8:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.3.2011, 8:23
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Суть:
есть окно, наследник QGraphicsView. Из-за этого на все окно растянут QGraphicsView, других элементов нет. При нажатии пишет в консоль положение курсора, а мне нужно, что бы просто при наведении писало. Под мышкой должна рисоваться вертикальная линия. В примерах Qwt такое есть, но он мне не подходит, да и не нужен в общем.

В добавок, я не пойму как теперь еще, к примеру, кнопку добавить на виджет.

Сообщение отредактировал RazrFalcon - 24.3.2011, 8:27
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 24.3.2011, 12:24
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


если ты в дизайнере поставишь setMouseTracking на графиквью, то всё прокатит, и вот как это сделать кодом:
graphicsView->viewport()->setMouseTracking(1);

дело в том, что у QGrapchicsView, у QTextEdit, у QTableWidget и т.д. есть этот viewport, та белая область, в которой и происходят все гадости

"кнопку на виджет"?.. кнопку на сцену?

Сообщение отредактировал abc - 24.3.2011, 12:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.3.2011, 14:16
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Не вышло.
Вот код:
.cpp
Раскрывающийся текст
#include "plot.h"
#include <QtDebug>

Plot::Plot()
{
    QGraphicsScene *scene = new QGraphicsScene();

    QPen pen(Qt::black, 2.0);

    //setMouseTracking(true);

    qsrand(QDateTime::currentDateTime().toTime_t());

    int x1=0;
    int x2=0;
    int y1=0;
    int y2=0;
    for (int i=1,s=5; i<11; i++, s+=5)
    {
        x2 = x1+s;
        y2 = qrand()%100;

        scene->addLine(x1,y1,x2,y2,pen);
        qDebug()<<x1<<y1<<x2<<y2;

        x1 = x2;
        y1 = y2;
        x2 = s*(i+1);
        y2 = qrand()%100;

        scene->addLine(x1,y1,x2,y2,pen);
        qDebug()<<x1<<y1<<x2<<y2;

        x1 = x2;
        y1 = y2;

        qDebug()<<"-------------";
    }

    setScene(scene);
    setDragMode(QGraphicsView::ScrollHandDrag);
    setRenderHint(QPainter::Antialiasing, true);
    viewport()->setMouseTracking(true);

    //setMouseTracking(true);

    //setWindowState(Qt::WindowMaximized);
    resize(560,350);
}

void Plot::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<event->scenePos();
}


.h
Раскрывающийся текст
#ifndef PLOT_H
#define PLOT_H

#include <QtGui>
#include <QMainWindow>

class Plot : public QGraphicsView
{
    Q_OBJECT

public:
    Plot();

private:
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

};
#endif // PLOT_H


Выглядит то так:

Как сюда другие элементы добавлять?

PS: я понимаю что это все звучит по идиотски, но я на этом застрял прилично.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 24.3.2011, 15:00
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


где ты нашёл этот метод?
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

я у QGraphicsView вижу только такой
void mouseMoveEvent ( QMouseEvent * event )

поменяй, заработает

Если виджеты на сцену, то QGraphicsScene::addWidget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.3.2011, 15:12
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Ура, работает.

>>Если виджеты на сцену, то QGraphicsScene::addWidget
Нужно вот что:

Если бы это был наследник QMainWindow - то понятно, а тут как? Я просто с этим впервые сталкиваюсь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 24.3.2011, 15:19
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


зачем ты полез наследоваться от вью?
создай виджет или мэйнвиндоу, как обычно, положи на него вью и всё, что надо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 24.3.2011, 15:24
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Но тогда я буду перехватывать положение курсора относительно виджета, а не QGraphicsView!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 21:43