LINUX.ORG.RU

Qt. Событие клика мыши для QGraphicsRectItem


0

1

На graphicsView рисуется прямоугольник, rect = scene->addRect(QRectF(0, 0, 100, 100), pen, brush);

как мне прописать событие клика по нему, например чтобы изменяется label на форме

[code=cpp]
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void changeEvent(QEvent *e);

private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
QGraphicsRectItem *rect;
QGraphicsItem *item;
private slots:
void RotateItem();
};

#endif // MAINWINDOW_H
[/code]

[code=cpp]
// mainwindow.cpp
#include «mainwindow.h»
#include «ui_mainwindow.h»
#include <QGraphicsItem>


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene;
ui->graphicsView->setScene(scene);
QPen pen(Qt::darkGreen);
QBrush brush(Qt::cyan);
rect = scene->addRect(QRectF(0, 0, 100, 100), pen, brush);
item = scene->itemAt(50,50);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

void MainWindow::RotateItem()
{
item->setRotation(60);
}

[/code]


На выбор:
mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * )
mouseMoveEvent ( QGraphicsSceneMouseEvent * )
mousePressEvent ( QGraphicsSceneMouseEvent * )
mouseReleaseEvent ( QGraphicsSceneMouseEvent * )

Делаешь своего наследника от QGraphicsRectItem, там делаешь что хочешь с этими евентами. Или sceneEventFilter тебе в помошь.

zJes ★★ ()
Ответ на: комментарий от zJes

mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * ) mouseMoveEvent ( QGraphicsSceneMouseEvent * ) mousePressEvent ( QGraphicsSceneMouseEvent * ) mouseReleaseEvent ( QGraphicsSceneMouseEvent * )

Насчёт этого понятно, но а если я например по щелчку мыши по прямоугольнику хочу изменять мой label на форме. Я же не смогу написать ui->label......

там надо либо каким-то образом определить ui, либо как-то глобально подбираться...

g-71 ()

Головой подумать не пробовал?

Ты знаешь координаты и размер прямоугольника. Ты знаешь координаты точки, в которую ткнул пользователь. Так в чём проблема?

yoghurt ★★★★★ ()
Ответ на: Головой подумать не пробовал? от yoghurt

Да это-то понятно как сделать. Тут любой дурак сделает, как вы сказазли. Если в Qt каждый примитив по сути объект, у которого есть событие - наверное нужно ЭТО использовать, а не проверять попадает ли точка на прямомоугольник... а если фигура - не прямоугольник...

g-71 ()
Ответ на: комментарий от namezys

у меня вопрос заключался в том, как например из события mousePressEvent ( QGraphicsSceneMouseEvent * ) моего класса наследника
class MyRect: public QGraphicsRectItem

оптимальнее обратиться к элементам формы например

либо мы не так понимаем друг друга

g-71 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.