Russian Qt Forum

Qt => Общие вопросы => Тема начата: JohnKrusty от Май 01, 2011, 14:11



Название: Добавить QGraphicsItem в сцену по нажатию кнопки
Отправлено: JohnKrusty от Май 01, 2011, 14:11
Добрый день. Есть класс Node, наследник QGraphicsItem, по сути это узел графа, короче кружочек. Необходимо по нажатию кнопки добавлять узел в сцену. Сцена связывается с QGraphicsView в конструкторе окна, а добавление само происходит в функции клика по кнопке, естественно прога вылетает после клика. Код типо:

Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QGraphicsScene * scene = new QGraphicsScene;
    ui->rabobl->setScene(scene);
   
}

void MainWindow::on_pb1_clicked()
{
  Node *node1 = new Node(ui->rabobl);
  scene->addItem(node1);
}
Подскажите, как поступить, я ламер)


Название: Re: Добавить QGraphicsItem в сцену по нажатию кнопки
Отправлено: alexman от Май 01, 2011, 20:02
Где падает? В конструкторе Node?


Название: Re: Добавить QGraphicsItem в сцену по нажатию кнопки
Отправлено: madRoger от Май 01, 2011, 20:48
А как вы из слота хотите обратиться к локальному указателю на объект, который создается в конструкторе(и там же умирает)?

Указатель на объект сцены обычно объявляют в хедере, а в конструкторе выделяют под него память, но не так:
Код:
QGraphicsScene * scene = new QGraphicsScene;
а так:
Код:
scene = new QGraphicsScene;

А в слоте уже обращаются к объекту сцены через указатель scene.


Название: Re: Добавить QGraphicsItem в сцену по нажатию кнопки
Отправлено: alexman от Май 01, 2011, 20:49
QGraphicsScene * QGraphicsView::scene () const