crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> mouseReleaseEvent в QGraphicsView
knf
  опции профиля:
сообщение 28.12.2013, 10:39
Сообщение #1


Студент
*

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

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




Репутация:   0  


Есть поле 4х4 из клеток в QGraphicsView. На вью итемы. Итемы свободно перемещаются по полю. Но надо, чтобы они устанавливались при перемещении в центре клетки. Знаю что надо использовать mouseRelealseEvent, но из-за нехватки знаний Qt не знаю как реализовать. А надо... Прошу помощи:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.12.2013, 10:45
Сообщение #2


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

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

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




Репутация:   34  


погляди описание класса QDrag
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.12.2013, 17:24
Сообщение #3


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

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

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




Репутация:   94  


Цитата(Алексей1153 @ 28.12.2013, 12:45) *
погляди описание класса QDrag
по-моему ему QDrag не поможет, всё равно нужно будет в рукопашную позиционировать в центре клетки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
knf
  опции профиля:
сообщение 29.12.2013, 1:06
Сообщение #4


Студент
*

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

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




Репутация:   0  


Да, QDrag боюсь мне не поможет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 29.12.2013, 1:28
Сообщение #5


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

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

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




Репутация:   34  


это было к вопросу о mouseRelealseEvent так то,

а что выравнивать потом - это очевидно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
knf
  опции профиля:
сообщение 3.1.2014, 19:03
Сообщение #6


Студент
*

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

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




Репутация:   0  


Пытаюсь сделать как то так, но что-то не выходит
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {

        for(QList<QGraphicsItem*>::Iterator it = items.begin(); it != items.end(); it++)
        {
            QPointF itemPos = (*it)->scenePos();
            (*it)->setPos(QPointF(
                              (int)itemPos.x() - (int)itemPos.x() % SIZELINE,
                              (int)itemPos.y() - (int)itemPos.y() % SIZELINE));
        }

    }
}
}


 QList<QGraphicsItem*> items;
items = ui->graphicsView->items();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
knf
  опции профиля:
сообщение 3.1.2014, 20:50
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(knf @ 3.1.2014, 20:03) *
Пытаюсь сделать как то так, но что-то не выходит
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {

        for(QList<QGraphicsItem*>::Iterator it = items.begin(); it != items.end(); it++)
        {
            QPointF itemPos = (*it)->scenePos();
            (*it)->setPos(QPointF(
                              (int)itemPos.x() - (int)itemPos.x() % SIZELINE,
                              (int)itemPos.y() - (int)itemPos.y() % SIZELINE));
        }

    }
}
}


 QList<QGraphicsItem*> items;
items = ui->graphicsView->items();

Как будет правильно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.1.2014, 12:06
Сообщение #8


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

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

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




Репутация:   94  


knf, а причём здесь главное окно?
ты со сценой либо представлением работаешь, у них события и обрабатывай, а не у главного окна.
Посмотри пример examples\graphicsview\diagramscene
в частности diagramscene.{h|cpp}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
knf
  опции профиля:
сообщение 5.1.2014, 19:36
Сообщение #9


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 5.1.2014, 13:06) *
knf, а причём здесь главное окно?
ты со сценой либо представлением работаешь, у них события и обрабатывай, а не у главного окна.
Посмотри пример examples\graphicsview\diagramscene
в частности diagramscene.{h|cpp}

С этим моментом я разобрался.
Появилась другая проблема.
void MyScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    QList<QGraphicsItem *> items = selectedItems();

    if(event->button() == Qt::LeftButton)
    {
        for(QList<QGraphicsItem *>::iterator it = items.begin(); it != items.end(); it++)
        {
            QPointF itemPos = (*it)->scenePos();
            (*it)->setPos(QPointF(
                              (int)itemPos.x() - (int)itemPos.x() % SIZELINE,
                              (int)itemPos.y() - (int)itemPos.y() % SIZELINE));
        }
    }
}


selectedItems() возвращает список всех выбранных в данный момент итемов.
Посмотрев в отладчике, я обнаружил, что в списке 0 итемов.(mouseReleaseEvent вызывается)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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