crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Наследник QGraphicsScene и ItemIsMovable
kenthfild
  опции профиля:
сообщение 23.5.2012, 20:47
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 13.5.2012
Пользователь №: 3375

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




Репутация:   0  


Доброго времени суток. У меня проблема с наследником QGraphicsScene. Я переопределил функцию mouseMoveEvent и все. То есть все остальные функции не трогал. Я на свою сцену добавляю объект (QGraphicsRectItem) и присваиваю ему флаг ItemIsMovable. При запуске программы объект не двигается. Переопределенная функция работает. Когда я меняю просто свою сцену на сцену QGraphicsScene - все работает. В чем проблема подскажите.


вот конструктор Диалога на которой и расположена сцена.

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),

    ui(new Ui::Dialog)
{

    ui->setupUi(this);

    scene = new QMyScene(this);
    scene->setSceneRect(0,0,500,500);


    ui->graphicsView->setFixedSize(500,500);
    ui->graphicsView->setScene(scene);



    QBrush greybrush(Qt::gray);
    QPen blackpen(Qt::black);
    blackpen.setWidth(1);


    item = scene->addRect(0,0,150,150,blackpen,greybrush);
    item->setFlag(QGraphicsItem::ItemIsMovable,true);



    connect(scene,SIGNAL(CursorSceneCoordsX(QString)),ui->lineEdit,SLOT(setText(QString)));
    connect(scene,SIGNAL(CursorSceneCoordsY(QString)),ui->lineEdit_2,SLOT(setText(QString)));

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 24.5.2012, 4:32
Сообщение #2


Студент
*

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

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




Репутация:   0  


Ты лучше код QMyScene покажи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kenthfild
  опции профиля:
сообщение 24.5.2012, 11:06
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 13.5.2012
Пользователь №: 3375

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




Репутация:   0  


Да, чет я протупил с этим... Вот заголовочный


#ifndef QMYSCENE_H
#define QMYSCENE_H

#include "QGraphicsScene"
#include "QGraphicsView"

class QMyScene : public QGraphicsScene
{
   Q_OBJECT

public:
    QMyScene(QObject *parent = 0);

    protected:
    void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);

signals:
    void CursorSceneCoordsX(QString coordX);
    void CursorSceneCoordsY(QString coordY);

private:

};

#endif // QMYSCENE_H



Вот спп файл

#include "qmyscene.h"
#include "QDebug"
#include <QGraphicsSceneMouseEvent>

QMyScene::QMyScene(QObject *parent)
{

}




void QMyScene::mouseMoveEvent(QGraphicsSceneMouseEvent * mouseEvent)
{

     QPointF coords = mouseEvent->scenePos();
    emit CursorSceneCoordsX(QString::number(coords.x()));
    emit CursorSceneCoordsY(QString::number(coords.y()));

}

void QMyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<event->button();
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Snake174
  опции профиля:
сообщение 25.5.2012, 4:31
Сообщение #4


Студент
*

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

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




Репутация:   0  


Попробуй так:
qmyscene.h

#ifndef QMYSCENE_H
#define QMYSCENE_H

#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsSceneMouseEvent>

class QMyScene : public QGraphicsScene
{
   Q_OBJECT

public:
    QMyScene(QWidget *parent = 0);

    protected:
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);

signals:
    void CursorSceneCoordsX(QString coordX);
    void CursorSceneCoordsY(QString coordY);

private:

};

#endif // QMYSCENE_H



qmyscene.cpp

#include <QDebug>
#include <QGraphicsSceneMouseEvent>
#include "qmyscene.h"

QMyScene::QMyScene(QWidget *parent):
  QGraphicsScene( parent )
{
}

void QMyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{

     QPointF coords = event->scenePos();
    emit CursorSceneCoordsX(QString::number(coords.x()));
    emit CursorSceneCoordsY(QString::number(coords.y()));
  QGraphicsScene::mouseMoveEvent(event);
}

void QMyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<event->button();
  QGraphicsScene::mousePressEvent(e);
}



Сообщение отредактировал Snake174 - 25.5.2012, 4:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kenthfild
  опции профиля:
сообщение 25.5.2012, 14:33
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 13.5.2012
Пользователь №: 3375

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




Репутация:   0  


Цитата(Snake174 @ 25.5.2012, 4:31) *
Попробуй так:
qmyscene.h

#ifndef QMYSCENE_H
#define QMYSCENE_H

#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsSceneMouseEvent>

class QMyScene : public QGraphicsScene
{
   Q_OBJECT

public:
    QMyScene(QWidget *parent = 0);

    protected:
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);

signals:
    void CursorSceneCoordsX(QString coordX);
    void CursorSceneCoordsY(QString coordY);

private:

};

#endif // QMYSCENE_H



qmyscene.cpp

#include <QDebug>
#include <QGraphicsSceneMouseEvent>
#include "qmyscene.h"

QMyScene::QMyScene(QWidget *parent):
  QGraphicsScene( parent )
{
}

void QMyScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{

     QPointF coords = event->scenePos();
    emit CursorSceneCoordsX(QString::number(coords.x()));
    emit CursorSceneCoordsY(QString::number(coords.y()));
  QGraphicsScene::mouseMoveEvent(event);
}

void QMyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug()<<event->button();
  QGraphicsScene::mousePressEvent(e);
}






Да так работает =) Спасибо большое, теперь диплом продвинется дальше=)). Я так понял вся соль была в том что я указал в качестве родителя класс Object?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.11.2024, 23:56