2012-03-07 63 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