qgraphicscene、QGraphicsView和QVBoxLayout()问题
各位好, 每次我运行Qt Creator时,当我注释掉行//mainWindow=newmainWindow时,它似乎就停止了工作;但如果该行没有被注释掉,主窗口将继续出现很多次。还要检查的是,QGraphicscene、QGraphicsView和QVBoxLayout的结构是否正确,因为在main.cpp中调用MainWindow时,我似乎无法使视图显示出来 谢谢:qgraphicscene、QGraphicsView和QVBoxLayout()问题,layout,view,qgraphicsview,scene,qmainwindow,Layout,View,Qgraphicsview,Scene,Qmainwindow,各位好, 每次我运行Qt Creator时,当我注释掉行//mainWindow=newmainWindow时,它似乎就停止了工作;但如果该行没有被注释掉,主窗口将继续出现很多次。还要检查的是,QGraphicscene、QGraphicsView和QVBoxLayout的结构是否正确,因为在main.cpp中调用MainWindow时,我似乎无法使视图显示出来 谢谢: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
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);
}
尝试在项目中包含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);