добавление QGraphicsView в QBoxLayout - PullRequest
1 голос
/ 07 марта 2012

Я новичок в QT и пытаюсь поиграться с приложениями.Я только что написал очень простое приложение с несколькими кнопками.Основная идея заключается в том, чтобы в моем приложении был небольшой «логотип».LПозже я бы хотел добавить немного фонового изображения.

Я написал код из примера приложения с макетом сетки, внутри которого находится QBoxLayout, который группирует мои кнопки.

Как вы можете видеть в моем коде, я пытался везде добавлять логотип.Когда я добавил его в 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 Ответ

1 голос
/ 07 марта 2012

Вы должны

  • Сделать вашу сцену, представление, элементы указателя элементов вашего класса окна
  • Создайте их в своем окне ctor
  • do grid->addWidget(view, 1, 1);

В противном случае все элементы, созданные в стеке ctor, будут удалены при выходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...