Михаиллл01 вересня 2019 р. 11:09
Как обращаться к объектам 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 и заминить картинки?
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 11 листопада 2024 р. 22:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 08:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 08:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 19:51
Evgenii Legotckoi31 жовтня 2024 р. 21:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 14:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 22:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 14:04
NSProject04 червня 2022 р. 10:49
IscanderChe31 жовтня 2024 р. 22:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Вот так можно обратится к объектам класса.
items() - возвращает массив с объектами
Нет, так получилось толькоо узнать количество объектов, но так нельзя обратиться к объекту. Может быть вы знаете, как можно обратится к объекту класса?
Видимо мне нужно переопределить метод items(), но как?