Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ проблемы с началом координат в QGraphicsScene

Автор: MetalKrot 23.8.2011, 15:34

кароче у меня такая проблемка: когда я создаю сцену на QGraphicsView центр координат находится в центре QGraphicsView. я отлавливаю координаты мыши, здесь центр координат расположен как нужно. тоесть получается если я начинаю рисовать мышкой с левого верхнего угла, то линия рисуется с центра виджета...

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->menuSelection_object, SIGNAL(triggered(QAction*)),
            this, SLOT(IsCheckedAction(QAction*)));

    ui->graphicsView->viewport()->installEventFilter(this);

    ui->graphicsView->setScene(new QGraphicsScene());
}

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);

    if (event->type() == QEvent::MouseButtonPress)
    {
        _startPos = mouseEvent->posF();

        if (mouseEvent->buttons() == Qt::LeftButton)
        {
            Creator objectsCreator = Creator();
            _drawObject = objectsCreator.CreateShape(_objectIdentifier);

            _drawObject->setStartPoint(QPoint(mouseEvent->x(), mouseEvent->y()));

            ui->graphicsView->scene()->addItem(_drawObject);
            ui->graphicsView->scene()->update();

        }
        else
        {
            _startPos.setX(-1);
            _startPos.setY(-1);
        }
    }

    if (event->type() == QEvent::MouseMove)
    {
        if ((_startPos.x() != -1) & (_startPos.y() != -1))
        {
            _drawObject->setFinishPoint(QPoint(mouseEvent->x(), mouseEvent->y()));

            ui->graphicsView->scene()->update();
        }
    }

    return QMainWindow::eventFilter(target, event);
}


_drawObject - это объект класса, наследуемого от QGraphicsItem.


и ещё один вопрос, когда происходит MouseMove могу ли я получить координаты начальной точки, т.е. той точки, где была нажата кнопка мыши???

Автор: Litkevich Yuriy 23.8.2011, 20:01

Цитата(MetalKrot @ 23.8.2011, 18:34) *
когда происходит MouseMove могу ли я получить координаты начальной точки, т.е. той точки, где была нажата кнопка мыши???
нет, нужно запоминать на MousePress

Про предыдущий текст не понял, в чём проблема, где вопрос?

Автор: MetalKrot 24.8.2011, 12:43

точка начала координат не совпадает у QGraphicsView и QGraphicsScene если я делаю так:

ui->graphicsView->setScene(new QGraphicsScene());


как их совместить ?

если же я делаю так:

ui->graphicsView->setScene(new QGraphicsScene(300, 400));


то всё работает нормально (цифры - это размеры GraphicsView)


ещё вопрос: могу ли отлавливать события сцены? точнее будет ли происходить событие нажатия и перемещения мыши?

ui->graphicsView->scene()->installEventFilter(this);

Автор: MetalKrot 24.8.2011, 14:36

кароче с этим разобрался)
нужно было отлавливать события самой сцены, тогда всё хорошо выходит.

очередной вопрос:
мне нужно создать глобальное перечисление. как это сделать ?

Автор: Litkevich Yuriy 24.8.2011, 17:14

Цитата(MetalKrot @ 24.8.2011, 17:36) *
мне нужно создать глобальное перечисление.
не соответствует названию темы - создавай новую

Автор: MetalKrot 25.8.2011, 14:11

поздно, с этим тоже разобрался)

тему можно закрывать

Автор: Trisch 27.2.2012, 1:01

Цитата(MetalKrot @ 25.8.2011, 15:11) *
поздно, с этим тоже разобрался)

тему можно закрывать


рановато закрывать((( хотя эта тема давно создана, я не вижу смысла создавать новую, с подобным вопросом.

как я понял координаты мыши совпадают с координатами QGraphicsView.

Так как же совместить координаты мыши или QGraphicsView с координатами сцены, с учетом того что координаты сцены отцентрированы?

Автор: Trisch 28.2.2012, 4:26

ха, проблема решена.

Все таки, тему можно закрыть)))

ха, проблема решена.

Все таки, тему можно закрыть)))

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)