Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mouseReleaseEvent в QGraphicsView
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
knf
Есть поле 4х4 из клеток в QGraphicsView. На вью итемы. Итемы свободно перемещаются по полю. Но надо, чтобы они устанавливались при перемещении в центре клетки. Знаю что надо использовать mouseRelealseEvent, но из-за нехватки знаний Qt не знаю как реализовать. А надо... Прошу помощи:)
Алексей1153
погляди описание класса QDrag
Litkevich Yuriy
Цитата(Алексей1153 @ 28.12.2013, 12:45) *
погляди описание класса QDrag
по-моему ему QDrag не поможет, всё равно нужно будет в рукопашную позиционировать в центре клетки
knf
Да, QDrag боюсь мне не поможет
Алексей1153
это было к вопросу о mouseRelealseEvent так то,

а что выравнивать потом - это очевидно
knf
Пытаюсь сделать как то так, но что-то не выходит
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
Цитата(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
knf, а причём здесь главное окно?
ты со сценой либо представлением работаешь, у них события и обрабатывай, а не у главного окна.
Посмотри пример examples\graphicsview\diagramscene
в частности diagramscene.{h|cpp}
knf
Цитата(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 вызывается)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.