Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблемы с началом координат в QGraphicsScene
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
MetalKrot
кароче у меня такая проблемка: когда я создаю сцену на 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
Цитата(MetalKrot @ 23.8.2011, 18:34) *
когда происходит MouseMove могу ли я получить координаты начальной точки, т.е. той точки, где была нажата кнопка мыши???
нет, нужно запоминать на MousePress

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

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


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

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

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


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


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

ui->graphicsView->scene()->installEventFilter(this);
MetalKrot
кароче с этим разобрался)
нужно было отлавливать события самой сцены, тогда всё хорошо выходит.

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

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

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


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

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

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

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

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

Все таки, тему можно закрыть)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.