Как обращаться к объектам QGraphicsItem созданным в QGraphicsView
Добрый день.
С помощью такого класса создаю эллементы в QGraphicsView
- class MoveItem : public QObject, public QGraphicsItem
- {
- Q_OBJECT
- public:
- explicit MoveItem(QObject *parent = 0);
- ~MoveItem();
- int id;
- int width, height;
- private:
- QRectF boundingRect() const;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event); //движение с нажатой кнопкой
- void mousePressEvent(QGraphicsSceneMouseEvent *event); //нажатие кнопки
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); //отпускание кнопки
- };
- QRectF MoveItem::boundingRect() const
- {
- return QRectF (-width/2,-height/2,width,height);
- }
- void MoveItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
- {
- QImage image(":/Images/Images/" + QString::number(id) + ".png");
- QRect recrangle(-width/2,-height/2,width,height);
- painter->drawImage(recrangle, image);
- Q_UNUSED(option);
- Q_UNUSED(widget);
- }
Создаю объект класса, задаю ему id , размер и расположение:
- static int randomBetween(int low, int high)
- {
- return (qrand() % ((high + 1) - low) + low);
- }
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- QPushButton* button = new QPushButton("Button in View", ui->graphicsView);
- button->setGeometry({25, 25, button->geometry().width(), button->geometry().height()});
- scene = new QGraphicsScene(this); // Инициализируем графическую сцену
- scene->setItemIndexMethod(QGraphicsScene::NoIndex); // настраиваем индексацию элементов
- ui->graphicsView->setScene(scene); // Устанавливаем графическую сцену в graphicsView
- ui->graphicsView->setRenderHint(QPainter::Antialiasing); // Настраиваем рендер
- ui->graphicsView->setCacheMode(QGraphicsView::CacheBackground); // Кэш фона
- ui->graphicsView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
- //scene
- scene->setSceneRect(0,0,1920,1080); // Устанавливаем размер сцены
- QImage fonImage(":/Images/Images/fon.png");
- fonImage = fonImage.scaled(1920, 1080, Qt::IgnoreAspectRatio);
- qDebug()<<fonImage.size();
- scene->addPixmap(QPixmap::fromImage(fonImage));//add image
- loadImages();
- }
- Widget::~Widget()
- {
- delete ui;
- }
- void Widget::loadImages()
- {
- id1.append(1); width1.append(40); height1.append(80); x1.append(98); y1.append(195); tipOth.append("Текстиль"); nameOth.append("Мочалка");
- id1.append(2); width1.append(40); height1.append(80); x1.append(193); y1.append(203); tipOth.append("Текстиль"); nameOth.append("Полотеце");
- id1.append(3); width1.append(20); height1.append(50); x1.append(32); y1.append(473); tipOth.append("Пластик"); nameOth.append("Пластикавая банка");
- id1.append(4); width1.append(30); height1.append(25); x1.append(65); y1.append(489); tipOth.append("Пластик"); nameOth.append("Пластикавая щетка");
- id1.append(5); width1.append(50); height1.append(150); x1.append(82); y1.append(388); tipOth.append("Металл"); nameOth.append("Металическая швабра");
- id1.append(6); width1.append(50); height1.append(150); x1.append(113); y1.append(394); tipOth.append("Пластик"); nameOth.append("Пластикавая швабра");
- id1.append(7); width1.append(80); height1.append(35); x1.append(128); y1.append(479); tipOth.append("Металл"); nameOth.append("Металический таз");
- id1.append(8); width1.append(40); height1.append(50); x1.append(175); y1.append(442); tipOth.append("Пластик"); nameOth.append("Пластикавая канистра");
- id1.append(9); width1.append(50); height1.append(60); x1.append(242); y1.append(465); tipOth.append("Пластик"); nameOth.append("Пластиковое ведро");
- id1.append(10); width1.append(20); height1.append(60); x1.append(302); y1.append(411); tipOth.append("Пластик"); nameOth.append("Пластикавая бутылка");
- id1.append(11); width1.append(20); height1.append(60); x1.append(329); y1.append(413); tipOth.append("Пластик"); nameOth.append("Пластикавая бутылка");
- id1.append(12); width1.append(50); height1.append(40); x1.append(409); y1.append(336); tipOth.append("Пластик"); nameOth.append("Резиновые перчатки");
- for (int i = 0; i< id1.size(); i++)
- {
- MoveItem *item = new MoveItem(); // Создаём графический элемент
- item->setPos(x1[i], y1[i]);// Устанавливаем случайную позицию элемента
- item->id = id1[i]; // set id
- item->width = width1[i];
- item->height = height1[i];
- scene->addItem(item); // Добавляем элемент на графическую сцену
- }
- }
Как можно обратится к объектам MoveItem и заминить картинки?
2
253
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- МА1 апреля 2025 г. 16:210ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Вот так можно обратится к объектам класса.
items() - возвращает массив с объектами
Нет, так получилось толькоо узнать количество объектов, но так нельзя обратиться к объекту. Может быть вы знаете, как можно обратится к объекту класса?
Видимо мне нужно переопределить метод items(), но как?