LINUX.ORG.RU

[Qt][noob]Создание виджета, содержащего сцену


0

1

Доброй ночи.

Пытаюсь создать пользовательский виджет, содержащий сцену, путём наследования QWidget. Получился следующий код:

//DataWindow.h
#ifndef DIAGRAMWINDOW_H
#define DIAGRAMWINDOW_H

#include <QtGui>
#include "DataRegion.h"

class DataWindow : public QWidget
{
    Q_OBJECT
public:
    DataWindow(QWidget *parent = 0);

private:
    QGraphicsScene *scene;
    QGraphicsView *view;
    DataRegion *region;
};
#endif // DIAGRAMWINDOW_H


//DataWindow.cpp
#include <QtGui>
#include "DataWindow.h"
#include "DataRegion.h"

DataWindow::DataWindow(QWidget *parent)
    :QWidget(parent)
{
    scene = new QGraphicsScene(0, 0, 600, 450);
    view = new QGraphicsView();
    view->setScene(scene);
    
    region = new DataRegion;
    scene->addItem(region);
    //setCentralWidget(view);
}

//main.cpp
#include <QtGui>
#include "DataRegion.h"
#include "DataWindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    DataWindow *view = new DataWindow;
    view->show();

    return app.exec();
}

DataRegion - класс для создания перемещающихся по сцене прямоугольников. Но при запуске получаю пустое окно - http://dl.dropbox.com/u/13814019/empty.png

Если же виджет DataWindow создать путём определения подкласса QMainWindow и добавить в конструктор setCentralWidget(view), то всё отлично отображается - http://dl.dropbox.com/u/13814019/rec.png

А также работает если в main.cpp всё заменить на следующий код:

//main.cpp
#include <QtGui>
#include "DataRegion.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene *scene = new QGraphicsScene(0, 0, 600, 450);
    QGraphicsView *view = new QGraphicsView;
    view->setScene(scene);

    DataRegion *test = new DataRegion;
    
    scene->addItem(test);

    view->show();

    return app.exec();
}

Помогите пожалуйста указанием недочетов при создании виджета DataWindow с наследованием от QWidget и попытке его отобразить.


А родительский виджет для GraphicsView кто должен устанавливать?

DataWindow::DataWindow(QWidget *parent)
    :QWidget(parent)
{
    scene = new QGraphicsScene(0, 0, 600, 450);
    view = new QGraphicsView(this);
    view->setScene(scene);
    
    region = new DataRegion;
    scene->addItem(region);
    //setCentralWidget(view);
}
fat_angel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.