【问题标题】:adding QGraphicsView to QBoxLayout将 QGraphicsView 添加到 QBoxLayout
【发布时间】:2012-03-07 18:57:01
【问题描述】:

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

我从一个带有网格布局的示例应用程序中编码,其中是一个 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();
}

主窗口.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

主窗口.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;
}

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    你应该

    • 使您的场景、视图、项目指针成为窗口类的成员
    • 在您的 Window ctor 中实例化它们
    • grid-&gt;addWidget(view, 1, 1);

    否则,所有在ctor中栈上实例化的项目都会在退出时被删除。

    【讨论】:

    • 当我这样做时,它抱怨:没有匹配的函数来调用 QGridlayout::addWidget(QGraphicsView&, int, int)' 所以我把它改成了 grid->addWidget(&view, 1,1),但是,没有显示图像:(
    • 可能是因为你的view在栈上,构造函数执行后销毁了,试试把GraphicsView转成指针看看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2019-09-10
    相关资源
    最近更新 更多