【问题标题】:QGraphicsScene, QGraphicsView and QVBoxLayout() problemQGraphicsScene、QGraphicsView和QVBoxLayout()问题
【发布时间】:2011-04-08 07:51:15
【问题描述】:

大家好,

每次我运行它似乎 Qt Creator 只是停止工作,当我注释掉 //mainWindow = new MainWindow(); 行但如果该行没有被注释掉, MainWindow 将继续出现很多次。还要检查QGraphicsSceneQGraphicsViewQVBoxLayout 的结构是否正确,因为当在 main.cpp 中调用 MainWindow 时,我似乎无法显示视图。

谢谢:)

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);
}

【问题讨论】:

    标签: layout view qgraphicsview scene qmainwindow


    【解决方案1】:

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

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    

    在 MainWindow 构造函数中取消注释 mainWindow 是递归调用,在这种情况下是不正确的方法。最后,尝试改变:

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

    进入:

       setLayout(layout);
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2013-11-19
      • 2014-02-18
      • 1970-01-01
      • 2011-06-26
      • 2011-08-21
      相关资源
      最近更新 更多