2012-03-07 71 views
1

我是一名QT新手,并试图玩弄应用程序。我刚用一些按钮编写了一个非常简单的应用程序。主要想法是在我的应用程序中有一个小的“标志”。 LATER我也想添加一些背景图片。将QGraphicsView添加到QBoxLayout

我已经编写了一个示例应用程序的网格布局,其中是一个QBoxLayout组合我的按钮。

正如你可以在我的代码中看到的,我试图在每个地方添加Logo。当我将它添加到main.cpp中时,我有两个视图,一个显示按钮,另一个显示我的标志。当然,我不想要这个。所以我尝试添加它mainwindow.cpp但在这种情况下,我没有看到我的标志出现在任何地方都:(

请告知

这里是代码:

的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

你应该

  • 让您的场景,查看你的窗口类的项目指针成员
  • 实例化它们在窗口的ctor
  • grid->addWidget(view, 1, 1);

否则,所有在ctor堆栈上实例化的物品在退出时都会被删除。

+0

当我这样做,它抱怨:没有匹配函数来调用QGridlayout :: addWidget(QGraphicsView&,int,int)'所以我改变它为grid-> addWidget(&view,1,1),但是,没有图像获取显示:( – user489152 2012-03-07 10:42:06

+0

确实。答案更新。 – Koying 2012-03-07 10:57:24

+1

可能是因为你查看堆栈并在构造函数执行后被销毁,请尝试将GraphicsView转换为指针并查看。 – Kunal 2012-03-07 11:00:14