gpt4 book ai didi

c++ - 将 QGraphicsView 添加到 QBoxLayout

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:32 24 4
gpt4 key购买 nike

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

我从一个带有网格布局的示例应用程序中编写代码,其中有一个 QBoxLayout,它将我的按钮分组。

如您在我的代码中所见,我已尝试在各处添加 Logo 。当我在 main.cpp 中添加它时,我有两个 View ,一个显示按钮,另一个显示我的 Logo 。我当然不想要这个。所以我尝试将它添加到 mainwindow.cpp 中,但在这种情况下,我根本看不到我的 Logo 出现在任何地方:(

请指教。

代码如下:

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

最佳答案

你应该

  • 让你的场景、 View 、项目指针成为你的窗口类的成员
  • 在您的窗口构造函数中实例化它们
  • 执行 grid->addWidget(view, 1, 1);

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

关于c++ - 将 QGraphicsView 添加到 QBoxLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com