crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> проблемы с началом координат в QGraphicsScene, хочу начало координат в левом верхнем углу
MetalKrot
  опции профиля:
сообщение 23.8.2011, 15:34
Сообщение #1


Новичок


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

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




Репутация:   0  


кароче у меня такая проблемка: когда я создаю сцену на 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
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

Про предыдущий текст не понял, в чём проблема, где вопрос?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MetalKrot
  опции профиля:
сообщение 24.8.2011, 12:43
Сообщение #3


Новичок


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

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




Репутация:   0  


точка начала координат не совпадает у 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
Сообщение #4


Новичок


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

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




Репутация:   0  


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

очередной вопрос:
мне нужно создать глобальное перечисление. как это сделать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.8.2011, 17:14
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(MetalKrot @ 24.8.2011, 17:36) *
мне нужно создать глобальное перечисление.
не соответствует названию темы - создавай новую
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MetalKrot
  опции профиля:
сообщение 25.8.2011, 14:11
Сообщение #6


Новичок


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

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




Репутация:   0  


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

тему можно закрывать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 27.2.2012, 1:01
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


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

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


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

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

Так как же совместить координаты мыши или QGraphicsView с координатами сцены, с учетом того что координаты сцены отцентрированы?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 28.2.2012, 4:26
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


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

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

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

Все таки, тему можно закрыть)))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 12.8.2020, 14:44