Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Martiro от Январь 05, 2013, 08:24



Название: Вопрос новичка по QGraphicsView
Отправлено: Martiro от Январь 05, 2013, 08:24
Объясните, что делаю не так?
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGraphicsScene scene(QRectF(-100,-100,640,480));
    QGraphicsView *wgt = new QGraphicsView(&scene);

    ui->vlMain->addWidget(wgt);
    QGraphicsRectItem* pRect = scene.addRect(0,0,100,100,QPen(Qt::black,3),QBrush(Qt::red));
    pRect->setFlags(QGraphicsItem::ItemIsMovable);

}
В общем, всё как по учебнику, но квадрата нет! В чем дело? Где я ошибся?


Название: Re: Вопрос новичка по QGraphicsView
Отправлено: Old от Январь 05, 2013, 08:39
Обьект сцены создается локально на стеке и после отработки конструктора - разрушается.
Создавай его на куче.


Название: Re: Вопрос новичка по QGraphicsView
Отправлено: Martiro от Январь 05, 2013, 08:44
Обьект сцены создается локально на стеке и после отработки конструктора - разрушается.
Создавай его на куче.
Не понял, что значит "на куче"? Выносить его объявление в хэдер?


Название: Re: Вопрос новичка по QGraphicsView
Отправлено: Old от Январь 05, 2013, 08:48
Не понял, что значит "на куче"? Выносить его объявление в хэдер?
Через new.


Название: Re: Вопрос новичка по QGraphicsView
Отправлено: Martiro от Январь 05, 2013, 08:55
Сделал так:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QGraphicsScene scene(QRectF(-100,-100,640,480));
    QGraphicsView *wgt = new QGraphicsView(&scene);

    ui->vlMain->addWidget(wgt);
    QGraphicsRectItem* pRect = new QGraphicsRectItem(0,0,100,100);
    pRect->setPen(QPen(Qt::black,3));
    pRect->setBrush(QBrush(Qt::red));
    pRect->setPos(0,0);
    pRect->setFlags(QGraphicsItem::ItemIsMovable);
    scene.addItem(pRect);
}
Ничего не изменилось.


Название: Re: Вопрос новичка по QGraphicsView
Отправлено: Old от Январь 05, 2013, 09:07
Код
C++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   QGraphicsScene *scene = new QGraphicsScene(QRectF(-100,-100,640,480));
   QGraphicsView *wgt = new QGraphicsView(scene);
 
   ui->vlMain->addWidget(wgt);
   QGraphicsRectItem* pRect = scene->addRect(0,0,100,100,QPen(Qt::black,3),QBrush(Qt::red));
   pRect->setFlags(QGraphicsItem::ItemIsMovable);
 
}