首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsScene、QGraphicsView和QVBoxLayout()问题

QGraphicsScene、QGraphicsView和QVBoxLayout()问题
EN

Stack Overflow用户
提问于 2011-04-08 07:51:15
回答 1查看 1.6K关注 0票数 0

大家好,

每次我运行Qt时,当我注释掉行//mainWindow = new MainWindow();时,似乎Qt就停止工作了,但是如果不注释掉行,, MainWindow就会多次出现。另外,检查QGraphicsSceneQGraphicsViewQVBoxLayout的结构是否正确,因为在main.cpp中调用MainWindow时,我似乎无法使视图出现。

谢谢:)

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), keydown_left(false), keydown_right(false),scene(NULL), view(NULL)
{
    qDebug("MainWindow");
    //mainWindow = new MainWindow();
    //qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
    scene = new QGraphicsScene(mainWindow);
    view = new QGraphicsView(scene, mainWindow);

    scene->setSceneRect(-300, 0, 640, 360);
    scene->setItemIndexMethod(QGraphicsScene::NoIndex);
    Egg *egg = new Egg();

    QVBoxLayout *layout = new QVBoxLayout();

    for (int i = 0; i < ObjCount; ++i) {
        FlyingObj *Fo= new FlyingObj();
        Fo->setPos(::sin((i * 6.28) / ObjCount) * 500,
                   ::cos((i * 6.28) / ObjCount) * 500);
        scene->addItem(Fo);
    }
    egg->setPos((640-64)/2, 100);//16 - 2*16
    scene->addItem(egg);


    view->setRenderHint(QPainter::Antialiasing);
    view->setBackgroundBrush(QPixmap(":/bg.jpg"));
    //view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
    view->setDragMode(QGraphicsView::NoDrag);
    view->setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Egg game"));
    view->resize(640, 360);
    QObject::connect(scene, SIGNAL(keyPressEvent(QKeyEvent)), this, SLOT(keyPressEvent(QKeyEvent)));
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    view->setFrameStyle(QFrame::NoFrame);
    view->setFocusPolicy(Qt::NoFocus);
    view->setCacheMode(QGraphicsView::CacheBackground);
    view->showFullScreen();

    layout->addWidget(view);
    QWidget *w = new QWidget();
    w->setLayout(layout);
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-31 05:08:02

尝试在项目中包含main函数,通常在文件: Main.cpp中单独定义,其中实例化您的MainWindow类:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

在mainWindow构造函数中取消注释MainWindow是一个递归调用,并且在这个上下文中是不正确的。最后,努力改变:

代码语言:javascript
复制
    layout->addWidget(view);
    QWidget *w = new QWidget();
    w->setLayout(layout);

转入:

代码语言:javascript
复制
   setLayout(layout);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5592098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档