Qt — перетащить перемещение qgraphicitem не работает хорошо

Мой простой код основывается на стандартном примере Qt «Сцена диаграммы». MainWindow наиболее просто, загружать только пользовательские сцены. Пользовательский интерфейс в графическом редакторе.
Перетащите графический полигон с помощью правой кнопки мыши, влево создайте новый элемент. Так?
Я должен дважды щелкнуть по пункту для выбора. И элемент нужно дважды щелкнуть без последнего нажатия кнопки, когда я хочу переместить элемент. Полное головокружение.

Код изделия:

BasicDiagramItem::BasicDiagramItem(QGraphicsItem *parent):
QGraphicsPolygonItem(parent)
{
drawCustomPoly();
}

void BasicDiagramItem::drawCustomPoly()
{
QPainterPath path;
customPoly << QPointF(0,50) << QPointF(50,0)
<< QPointF(0,-50) << QPointF(-50,0)
<< QPointF(0,50);
setPolygon(customPoly);
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
//setFlag(QGraphicsItem::ItemClipsToShape,true); //testowe

}

void BasicDiagramItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{

QGraphicsPolygonItem::mouseMoveEvent(event);
}

Код сцены:

DiagramScene::DiagramScene(QObject *parent):
QGraphicsScene(parent)
{

}

void DiagramScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
if(mouseEvent->button() != Qt::RightButton) return;

BasicDiagramItem *item;
item = new BasicDiagramItem();
//item->setBrush()
addItem(item);
item->setPos(mouseEvent->scenePos());
QGraphicsScene::mousePressEvent(mouseEvent);

}

void DiagramScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
QGraphicsScene::mouseMoveEvent(mouseEvent);

}

void DiagramScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
QGraphicsScene::mouseReleaseEvent(mouseEvent);
}

Этот код похож на пример Qt. Я просто не использую режим для создания другого объекта, не использую меню Cutom, и я не рисую стрелки.

Итак, что я делаю не так? Почему в приложениях есть ошибка с двойным щелчком мыши?

0

Решение

Итак, что я делаю не так? Почему в приложениях есть ошибка с двойным щелчком мыши?

Я думаю, что это причина:

void DiagramScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
if(mouseEvent->button() != Qt::RightButton) return;

Обратите внимание, что при щелчке левой кнопкой мыши mousePressEvent () просто возвращается, ничего не делая; это объясняет, почему ничего не происходит, когда вы щелкаете левой кнопкой мыши. (При двойном щелчке OTOH вызывается mouseDoubleClickEvent (), и, поскольку вы не переопределили mouseDoubleClickEvent (), вызывается метод QGraphicsScene :: mouseDoubleClickEvent (), который обрабатывает щелчок там.

Я думаю, что вы хотите сделать вместо этого:

void DiagramScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
if(mouseEvent->button() != Qt::RightButton)
{
QGraphicsScene::mousePressEvent(mouseEvent);  // call up to superclass
return;
}

[...]

Таким образом, QGraphicsScene :: mousePressEvent (mouseEvent) может выполнять работу по выбору элемента, по которому щелкнул пользователь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]