11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
1 | |
Qt. QGraphics. Как определить scene01.09.2014, 09:19. Показов 2730. Ответов 11
Метки нет (Все метки)
Помогите пожалуйста уважаемые гуру программирования..
Имеется следующее: есть класс mainwindow в заголовочном файле mainwindow.h определена scene типа QGraphicsscene (public) в файле .cpp создается объект scene = new QGraphicsscene. Далее создан класс Square одним из методов которого - построение геометрического объекта на этой самой scene, подскажите пожалуйста как определить scene. Класс Square по идее унаследован от mainwindow, пытался в базовом прописать QGraphicsscene *scene типа protected, pulic ..вроде компилируется но при запуске - крах.. Подскажите пожалуйста, как лучше решить это?? Заранее огромное спасибо!
0
|
01.09.2014, 09:19 | |
Ответы с готовыми решениями:
11
Cannot load scene: Invalid scene name (empty string) Public Scene scene. Вывести в редактор Cвязь координат QGraphics QGraphics. Перехват событий о перемещении Itema |
Заблокирован
|
|
01.09.2014, 09:35 | 2 |
Это что ещё за бред? Тыж понимаешь, что при создание каждого объекта Square у тебя будет MainWidnow заново пересоздаваться, т.к. это базовый класс и его конструктор вызовется.
Тебе нужно твой класс Square наследовать от QGraphicsItem, переопределять в нём paintEvent() рисовать в нём свой квадрат. Добавлять в сцену экземпляр своего класса надо при помощи addItem. Если хочешь на сцене стандартные виджеты рисовать и манипулировать ими - почитай про QGraphicsProxyWidget
1
|
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
|
|
01.09.2014, 09:52 | 3 |
Блин! Многабукав а нифига не понять! Лучше бы код выложил!
Я так понимаю, что это попытка написать что-то методом тыка, не читая литературы. Если присутствует QGraphicsScene, то должен быть и QGraphicsView - который является собственно окном для отображения графики. А QGraphicsScene - это по сути только контейнер для графических объектов. В QGraphicsView нужно передать указатель на вашу сцену, через метод QGraphicsView::setScene(QGraphicsScene*), Либо при создании сцены указать QGraphicsView в качестве родителя. Какой именно метод? Что в нем реализовано? Код в студию!
0
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|||||||||||||||||||||||||||||||
01.09.2014, 10:11 [ТС] | 4 | ||||||||||||||||||||||||||||||
mainwindow.h
вроде как хочется методом create_scene класса My_scene создавать scene и view, а потом create создать эллипс. в конструкторе mainwindow.cpp пока ничего не писал ибо не получить очередное )) Добавлено через 5 минут литературу читал - принцип работы QGraphics понимаю, проблема с реализацией того, что понимаю)
0
|
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
|
|
01.09.2014, 10:26 | 5 |
Понятно.
В общем это работать не будет и все нужно делать совсем не так. Раз вы собираетесь создавать QGraphicsScene и QGraphicsView внутри своего класса My_scene, то не нужно My_scene ни от чего наследовать. Либо наследовать его от QObject, чтобы например была возможность использовать систему сигнал-слот. Для view нужно вызвать метод view.show(), чтобы окно отобразилось на экране (окно будет отдельное, не внутри MainWindow) Далее по поводу наследования Square от scene - зачем это? Какой смысл вы хотели в это заложить? Не проще ли метод create() создать прямо в My_scene? А если честно, то мне вообще не понятна ваша задумка. Для чего вообще нужен класс My_scene? Не проще ли все это создать прямо в MainWindow? Или это какая-то обертка будет или библиотека? Добавлено через 1 минуту Если проблема с реализацией, то это как раз означает, что вы не понимаете!
0
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
01.09.2014, 10:33 [ТС] | 6 |
да в курсе я про view и как его отобразить.
хотел отображать объекты сцены на ui->graphicsView. Цель программы научиться работать с классами и наследованием, поэтому особой смысловой нагрузки сия тулза не несет. смысл такой: есть класс my_scene методами которого можно будет поворачивать фигуры созданные другими классами Square, Triangle, Rectangle и менять цвет их заливки. Соответственно классы Square, Triangle, Rectangle создают квадраты, треугольники и прямоугольники.
0
|
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
|
||||||
01.09.2014, 10:48 | 7 | |||||
ОК.
Тогда думаю, лучше классы Square, Triangle, Rectangle наследовать от QGraphicsItem. Нужно будет переопределить методы
#include <QPainter> Далее в методах paint каждого из классов реализуем рисования элипса, прямоугольника и треугольника соответственно. А также создаем метод для передачи в класс цвета пера и кисти QPen и QBrush. Создаем классы фигур в классе My_scene, добавляем их на сцену, через QGraphicsScene::addItem() Ну и все. Вращение реализовывается через методы: QGraphicsItem::rotate(qreal angle) - вращение относительно текущего угла поворота. QGraphicsItem::setRotation(qreal angle) - вращение относительно системы координат.
1
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|||||||||||||||||||||||||||||||
01.09.2014, 14:49 [ТС] | 8 | ||||||||||||||||||||||||||||||
вот спасибо тебе дружище!!) поюзаю сейчас данные тобой советы) Добавлено через 3 часа 56 минут alexey_rage, помоги плиз.. делаю как ты говорил, отдельный класс для создания определенной фигуры, так square.cpp
если начинаю писать в файле main.cpp
помоги плиз..нервничаю сильно чет.. Добавлено через 47 секунд alexey_rage, помоги плиз.. делаю как ты говорил, отдельный класс для создания определенной фигуры, так square.cpp
если начинаю писать в файле main.cpp
помоги плиз..нервничаю сильно чет..
0
|
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
|
|
01.09.2014, 14:54 | 9 |
0
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
01.09.2014, 15:06 [ТС] | 10 |
да нет конечно, что только уже не инклудил..
я так понимаю если создаешь метод вызова по клику, например void Dialog::on_create_square_clicked() как то надо сообщать о том, что scene была ранее создана и все что мы пытаемся нарисовать этим методом, мы хотим это сделать на этой сцене. Самая основная моя проблема в синтаксисе, точнее в отсутствии моего понимания как и куда все это прописать.
0
|
596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
|
|||||||||||
01.09.2014, 15:17 | 11 | ||||||||||
У вас проблема не в синтаксисе, а в отсутствии понимания принципов ООП.
Ну так а кто мешает при создании диалога передать в него указатель на ранее созданную сцену? Ну или прилипить к диалогу метод на подобие QGraphicsView::setScene(QGraphicsScene* scene); При описании класса Dialog объявляем внутри класса указатель на сцену QGraphicsScene* myScene; В конструкторе класса Dialog зануляем данный указатель myScene = 0; Когда сцена будет создана, передаем указатель на нее в класс Dialog.
1
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
02.09.2014, 08:24 [ТС] | 12 |
alexey_rage, Привет) подскажи пожалуйста, а вот там идет проверка создана ли сцена,
то есть если я ее до создаю в конструкторе Dialog способом QGraphicsScene *scene = new QGraphicsScene; то по идее условие возвратит TRUE??
0
|
02.09.2014, 08:24 | |
02.09.2014, 08:24 | |
Помогаю со студенческими работами здесь
12
Отобразить javafx.scene.image.Image в javafx.scene.layout.GridPane JavaFX + Scene Builder как получить значение с TextField Перемещение камеры, как в редакторе unity в окне Scene Как конвертировать java.io.File к javafx.scene.image.Image? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |