15 / 11 / 4
Регистрация: 03.08.2019
Сообщений: 209
|
|||||||||||||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||||||||||||
2д лего. QGraphicsItemGroup?19.06.2021, 14:43. Показов 1701. Ответов 5
Здравствуйте
Программа лего, вид с боку Я хочу с помощью класса (detail_4) группировать блоки (block_2) в деталь определенной формы, но не могу понять некоторый моменты: когда создаю QList в mainwindow.cpp, затем scene->createItemGroup(group) - группа создается, но я даже не понимаю как теперь получить указать на данную группу внутри detail_4 создать группу мне не удается main.cpp Кликните здесь для просмотра всего текста
block_2.h Кликните здесь для просмотра всего текста
block_2.cpp Кликните здесь для просмотра всего текста
detail_4.h Кликните здесь для просмотра всего текста
detail_4.cpp Кликните здесь для просмотра всего текста
mainwindow.h Кликните здесь для просмотра всего текста
mainwindow.cpp Кликните здесь для просмотра всего текста
mainwindow.ui Кликните здесь для просмотра всего текста
Добавлено через 2 минуты Если кто может помогите с написанием класса detail_4. именно этот класс я предполагаю использовать как движимую деталь сцены для "строительства". "физически" деталь состоит из блоков, а пазы для крепления так же остаются у блоков. по сути, деталь - это группа блоков
0
|
19.06.2021, 14:43 | |
Ответы с готовыми решениями:
5
QGraphicsItemGroup Наследник QGraphicsItemGroup: возможно ли? Создание лего программа для роботов Лего на С++ |
15 / 11 / 4
Регистрация: 03.08.2019
Сообщений: 209
|
||||||||||||||||||||||||||
19.06.2021, 21:40 [ТС] | 2 | |||||||||||||||||||||||||
в моем представлении деталь состоит из блоков:
block.h Кликните здесь для просмотра всего текста
block.cpp Кликните здесь для просмотра всего текста
я бы хотел чтобы с кнопки: часть mainwindow.cpp Кликните здесь для просмотра всего текста
мы формировали деталь: detail.h Кликните здесь для просмотра всего текста
detail.cpp Кликните здесь для просмотра всего текста
помогите пожалуйста разобраться, правильно ли я вообще формирую деталь? в конструкторе detail я добавляю группу блоков в сцену, но выглядит это как то неестественно, что-ли и каким образом я могу переопределить "мышиные события" для detail? сейчас ни mousePress ни mouseMove не работают
0
|
1081 / 685 / 184
Регистрация: 30.03.2021
Сообщений: 2,138
|
||||||||||||||||
20.06.2021, 03:50 | 3 | |||||||||||||||
QGraphicsItemGroup* group; это надо в .h файл в класс детали переместить и тогда
получается если в конструкторе Detail group = _scene->createItemGroup(group_list); создаем группу на сцене это не имеет никакого отношения к событиям мыши обьекта класса Detail, поэтому я пробовал переопределить их в кастомном классе порожденном от QGraphicsItemGroup, класс детали наследовать от QGraphicsItem, и в нем добавлять на сцену группу с переопределенными ивентами мыши, но это тоже не сработало. думаю можно попробовать создавать группу не в конструкторе детали а непосредственно при ее создании QList <QGraphicsItem*> group_list; переносим в .h как поле класса
Еще у меня вопрос-зачем Вы под каждую деталь и блок создаете свой класс? не проще ли будет иметь один универсальный класс? а особенности блока или детали передавать в конструкторе. Например для детали Detail(bool geometry[3][3], bool isMovable, bool someProperty); и в зависимости от этих параметров формировать деталь, но в едином классе а если так неудобно, то можно иметь базовый класс baseDetail где реализованы общие моменты для всех деталей и наследование от нужных классов, и уже от него создавать детали с отличиями
0
|
1081 / 685 / 184
Регистрация: 30.03.2021
Сообщений: 2,138
|
||||||
20.06.2021, 11:56 | 4 | |||||
попробовал этот вариант-еще хуже прежнего , теперь группа даже не распознается по щелчку в пределах ее boundingRect тем способом который прикладываю ниже, но если убрать такое распознавание то группу можно
двигать, она как бы находится на самом нижнем уровне, под всеми своими дочерними итемами-и если их растащить в стороны то можно двигать группу, хотя метки в дебаг она не возвращает, а возвращает пустую строку, тоесть как бы клик по пустому месту... Да, и обработка событий мыши в таком варианте тоже не работает. Короче видимо у меня тотальное непонимание механики QGraphicsItemGroup, фантазия закончилась и идей больше нет, много искал в инете по этой теме-тоже нифига не нашел.
0
|
15 / 11 / 4
Регистрация: 03.08.2019
Сообщений: 209
|
||||||
20.06.2021, 14:10 [ТС] | 5 | |||||
sdf45, да уж, с группами очень непонятно
не обращайте внимания, таким образом я веду либо старые версии классов (вдруг что то пригодится), либо пробую альтернативные реализации судя по всему, создание группы лишь усложняет дальнейшую реализацию. тут вопрос, при вот таком подходе, группа то создается, или все таки нет? почему тогда поведение абсолютно разное если мы создаем группу через scene->createItemGroup(group) и просто через addItem(item)??? реализация через addItem (createItemGroup есть выше): Кликните здесь для просмотра всего текста
0
|
1081 / 685 / 184
Регистрация: 30.03.2021
Сообщений: 2,138
|
|
20.06.2021, 14:27 | 6 |
я уже боюсь что-либо утверждать с этими группами, но по логике поведение должно быть одинаковое, просто и Вы и я делаем ошибки, я пытался создать группу в конструкторе группы через createItemGroup(group) а Вы QGraphicsItemGroup* group; и addItem(item) потому как не напишешь же this=createItemGroup(group)
Предлагаю отказаться от QGraphicsItemGroup до выяснения правильного подхода к нему, и замутить реализацию группы QGraphicsItem своими руками.
0
|
20.06.2021, 14:27 | |
20.06.2021, 14:27 | |
Помогаю со студенческими работами здесь
6
3D Конструктор в стиле лего с облетом камеры Qt, лего игрушка (2д), трудности с наследованием и "детальками" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
|
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
|
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность
В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
|
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
|
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
|
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
|
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
|
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. )
Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
|
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
|
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
|
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
|
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
|