将QGraphicsView添加到QBoxLayout

时间:2012-03-07 10:24:01

标签: c++ qt

我是一名QT新手,并尝试使用Apps。我刚用一些按钮编写了一个非常简单的应用程序。主要想法是在我的应用程序中有一个小“徽标”。我想添加一些背景图片。

我已经从一个带有网格布局的App示例编写了一个QBoxLayout,它将我的按钮分组。

正如您在我的代码中所看到的,我尝试过在任何地方添加徽标。当我在main.cpp中添加它时,我有两个视图,一个显示按钮,另一个显示我的徽标。我当然不希望这样。所以我尝试在mainwindow.cpp中添加它,但在这种情况下,我看不到我的Logo出现在任何地方:(

请告知。

以下是代码:

main.cpp中:

#include <QtGui/QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include "mainwindow.h"

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

    Window window;
    window.show();
/*
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    QGraphicsPixmapItem item(QPixmap("/home/marc/Desktop/Niranjana/Images/logo.9.png"));
    scene.addItem(&item);
    view.show();
*/

    return a.exec();
}

mainwindow.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QRadioButton>


class QGroupBox;

class Window : public QWidget
{
    Q_OBJECT

public:
    Window(QWidget *parent = 0);
    void onCheck_remote(int flag);
    void onCheck_local(int flag);


private:

    QRadioButton *button_local;
    QRadioButton *button_remote;
    QGroupBox *createPushButtonGroup();


};

#endif

mainwindow.cpp

#include <QtGui>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>
#include "mainwindow.h"

Window::Window(QWidget *parent)
    : QWidget(parent)
{
    QGridLayout *grid = new QGridLayout;

    QGraphicsScene scene;
    QGraphicsPixmapItem item(QPixmap("/home/test/logo.png"));
    QGraphicsView view(&scene);
    scene.addItem(&item);
    view.show();

    grid->addWidget(view.viewport(), 1, 1);


    grid->addWidget(createPushButtonGroup(), 2, 1);

    setLayout(grid);
    setWindowTitle(tr("My App"));
    resize(480, 420);
}

QGroupBox *Window::createPushButtonGroup()
{
    QGroupBox *groupBox = new QGroupBox();

  /*
    QGraphicsScene scene;
    QGraphicsPixmapItem item(QPixmap("/home/marc/Desktop/Niranjana/Images/logo.9.png"));
    QGraphicsView view(&scene);
    scene.addItem(&item);
    scene.setBackgroundBrush(Qt::white);
    view.show();
*/
    QPushButton *button1 = new QPushButton(tr("&Start"));
    QPushButton *button2 = new QPushButton(tr("&Stop"));

    button_local = new QRadioButton(tr("&with power"));
    button_remote = new QRadioButton(tr("without power"));
    button_local->setChecked(1);


    QVBoxLayout *vbox = new QVBoxLayout;
   // vbox->addSpacing(10);
   // vbox->addWidget(view.viewport());
    //vbox->addSpacing(10);
    vbox->addWidget(button1);
    vbox->addSpacing(10);
    vbox->addWidget(button2);
    vbox->addSpacing(50);
    vbox->addWidget(button_local);
    vbox->addWidget(button_remote);
    vbox->addStretch(1);
    groupBox->setLayout(vbox);


    return groupBox;
}

1 个答案:

答案 0 :(得分:1)

你应该

  • 制作窗口类的场景,视图,项目指针成员
  • 在Window ctor
  • 中实例化它们
  • 执行grid->addWidget(view, 1, 1);

否则,退出时将删除ctor中堆栈上实例化的所有项目。