我试图在MainWindow中创建一个QGraphicScene(带有适当的View)。 场景是在一个单独的类(主窗口的子窗口小部件)中定义的。
开放行动运作良好,我可以打开每张照片,但它们总是以新的方式打开 窗口,而不是在MainWindow内。
当我在子窗口小部件中创建一个标签(或左右)时,它会在主窗口中正确显示。所以问题似乎是QGraphicScene或QGraphicView。
主窗口:
MainWindow::MainWindow()
{
QWidget *widget = new QWidget;
setCentralWidget(widget);
PictureArea = new picturearea(this);
QHBoxLayout *HLayout = new QHBoxLayout(this);
HLayout->addWidget(PictureArea,1);
widget->setLayout(HLayout);
createActions();
createMenus();
this->setMinimumSize(800,600);
this->resize(800,600);
}
...
void MainWindow::open()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),
QDir::currentPath(), tr("Image Files (*.png *.jpg)"));
if (!fileName.isEmpty())
{
QImage image(fileName);
if (image.isNull())
{
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot load %1.").arg(fileName));
return;
}
//transfer to child widget, guess no mistakes so far
PictureArea->setPicture(image);
}
}
picturearea:
picturearea::picturearea(QWidget *parent) : QWidget(parent)
{
}
void picturearea::setPicture(QImage image)
{
QGraphicsScene* scene = new QGraphicsScene();
QGraphicsView* view = new QGraphicsView(scene);
QGraphicsPixmapItem* item =
new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
view->show();
}
如何在MainWindow中创建场景而不是在单独的窗口中?我使用的是QT 4.7.4,Windows7 64位。
答案 0 :(得分:1)
每次设置图片时,您都会创建新的QGraphicsScene
和QGraphicsView
。并且您没有将view
置于任何布局或设置父级,因此当您致电view->show()
时,它会在新窗口中打开。
您应该在构造函数中创建QGraphicsView
和QGraphicsScene
。
//picturearea.h
...
public:
QGraphicsView *view;
QGraphicsScene *scene;
...
//pircurearea.cpp
picturearea::picturearea(QWidget *parent) : QWidget(parent)
{
this->setLayout(new QVBoxLayout);
view = new QGraphicsView(this);
this->layout()->addWidget(view);
scene = new QGraphicsScene;
view->setScene(scene);
}
void picturearea::setPicture(QImage image)
{
scene->clear();
scene->addPixmap(QPixmap::fromImage(image));
}