Название: paintEvent & QGraphicsScene Отправлено: YaTT от Май 25, 2015, 16:30 Здравствуйте, уважаемые форумчане.
Недавно начала изучать Qt(мес. назад),т.к. дали задание сделать граф редактор. Рисовать круги и получать их координаты, помещать их в QList. Круги я нарисовал, добавив QGraphicsView и установив сцену, рисую круги посредством добавления их на сцену как QgraphicsPixmapItem; Но не могу получить их координаты при перемещении. т.е. я должен перемещать объект и его координаты должны динамические меняться и показываться в label например: круг был в (100,50) и в label показывается (100,50),затем я перемещаю круг,например, на (200,400) и в label тоже должно быть (200,400) Как решать проблему? Код
Название: Re: Координаты при перемещении Pixmap Отправлено: gil9red от Май 25, 2015, 17:00 Попробуйте у сцены ловить сигнал changed (http://doc.qt.io/qt-4.8/qgraphicsscene.html#changed)
Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 25, 2015, 18:13 Попробуйте у сцены ловить сигнал changed (http://doc.qt.io/qt-4.8/qgraphicsscene.html#changed) не могу попробовать, т.к. Qlist ещё не сделан =\Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 25, 2015, 18:48 Попробуйте у сцены ловить сигнал changed (http://doc.qt.io/qt-4.8/qgraphicsscene.html#changed) не могу попробовать, т.к. Qlist ещё не сделан =\к тому же, в QList нужно записать тип круга + его коорды,а я планировал их считывать с Label Название: Re: Координаты при перемещении Pixmap Отправлено: Igors от Май 26, 2015, 07:48 Недавно начала изучать Qt(мес. назад),т.к. дали задание сделать граф редактор. Вы перемудрили и переусложнили себе задачу. Чтобы просто рисовать круги - QGraphicsView совершенно не нужен. А задействовать QgraphicsPixmapItem совсем плохо - круг можно хранить в виде "центр + радиус", а пиксмап - целая картинка которую надо перестраивать. Рисовать круги и получать их координаты, помещать их в QList. Круги я нарисовал, добавив QGraphicsView и установив сцену, рисую круги посредством добавления их на сцену как QgraphicsPixmapItem; Нужно просто-напросто рисовать круги в paintEvent, задание "более чем лояльноe" Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 26, 2015, 08:49 Вы перемудрили и переусложнили себе задачу. Чтобы просто рисовать круги - QGraphicsView совершенно не нужен. А задействовать QgraphicsPixmapItem совсем плохо - круг можно хранить в виде "центр + радиус", а пиксмап - целая картинка которую надо перестраивать. Нужно просто-напросто рисовать круги в paintEvent, задание "более чем лояльноe" Окей, днём попробую сделать через paintEvent Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 26, 2015, 12:20 А почему бы просто не добавлять на сцену круги, без paintEvent?
Код
Название: Re: Координаты при перемещении Pixmap Отправлено: gil9red от Май 26, 2015, 15:48 Через paintEvent не сложно делать :)
По работе делал минимальный пример рисования, и вспомнил о этой теме: Код
Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 26, 2015, 18:54 Вот что я накалякал, всё хорошо рисуется,НО, как сделать так, чтобы круг рисовался на QGraphicsScene + рисование по кнопки\экшэну.
Код как я понял, чтобы рисовать по щелчку по кнопке\экшэну, нужно сделать Signal-slot. допустим connect(ui->button1,SIGNAL(clicked(bool)),this,SLOT(paintEvent(QPaintEvent*))); но круг всё равно рисуется при запуске программы,а не при нажатии Название: Re: Координаты при перемещении Pixmap Отправлено: gil9red от Май 26, 2015, 19:06 Вот что я накалякал, всё хорошо рисуется,НО, как сделать так, чтобы круг рисовался на QGraphicsScene + рисование по кнопки\экшэну. Код как я понял, чтобы рисовать по щелчку по кнопке\экшэну, нужно сделать Signal-slot. допустим connect(ui->button1,SIGNAL(clicked(bool)),this,SLOT(paintEvent(QPaintEvent*))); но круг всё равно рисуется при запуске программы,а не при нажатии Для обновления вызывается слот update, а этот слот вызовет метод-событие paintEvent Название: Re: Координаты при перемещении Pixmap Отправлено: YaTT от Май 26, 2015, 19:21 Для обновления вызывается слот update, а этот слот вызовет метод-событие paintEvent Код вот так?если да, то всё равно круг рисуется не по нажатию. нет?тогда как :-[ Название: Re: Координаты при перемещении Pixmap Отправлено: gil9red от Май 26, 2015, 20:48 Для обновления вызывается слот update, а этот слот вызовет метод-событие paintEvent Код вот так?если да, то всё равно круг рисуется не по нажатию. нет?тогда как :-[ Правильно было бы так: connect(ui->button1,SIGNAL(clicked()),this,SLOT(update())); Добавил пример рисования / удаления эллипсов через кнопки и paintEvent |