МихаилллҚыр. 1, 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, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
m
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
m
- molni99
- Қаз. 26, 2024, 1:29 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:20ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
IscanderCheҚаз. 31, 2024, 3:43 Т.Қ.
Вот так можно обратится к объектам класса.
items() - возвращает массив с объектами
Нет, так получилось толькоо узнать количество объектов, но так нельзя обратиться к объекту. Может быть вы знаете, как можно обратится к объекту класса?
Видимо мне нужно переопределить метод items(), но как?