c++ - 从 Qt 开始 - QGraphicsView 和 QGraphicsScene

标签 c++ qt

我是使用 Qt 的初学者,我遇到了问题。我想使用 QGraphicsView 和 QGraphicsScene 显示红色背景。我仍然显示白色,而不是红色。我不知道问题出在哪里。

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QBrush>

class Screen:public QGraphicsView
{
Q_OBJECT

public:
  Screen();
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"

Screen::Screen()
{

    QGraphicsView *view = new QGraphicsView(this);
    QGraphicsScene *scene = new QGraphicsScene();
    QBrush redBrush(Qt::red);

    scene->setBackgroundBrush(redBrush);
    view->setScene(scene);
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Screen scr;
    scr.show();

    return a.exec();
}

最佳答案

您发布的代码的问题是创建了两个不同的 QGraphicsView 对象 - 一个是 Screen 对象(scr),它是 QGraphicsView 的子类,因此是 QGraphicsView 对象,另一个是 ( view)您在 Screen 构造函数中用“new”分配的对象。

您正在设置第二个场景的场景属性,但从未显示它或对其执行任何操作。您将看到屏幕上显示的第一个(因为这是您在 main() 内部调用 show() 的那个),但由于您从未设置其场景属性,因此它保持空白/白色。

最简单的修复方法是删除不必要的第二个 QGraphicsView 对象。我将场景构造函数更改为:

Screen::Screen()
{
    QGraphicsScene *scene = new QGraphicsScene();
    scene->setBackgroundBrush(Qt::red);
    setScene(scene);
}

...完成此操作后,程序现在会显示您所期望的红色窗口。

关于c++ - 从 Qt 开始 - QGraphicsView 和 QGraphicsScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588914/

相关文章:

c++ - 如何推迟shared_ptr的删除操作?

c++ - 未定义对 `TextOutA@20' 的引用

c++ - 将 while 循环转换为数学公式

c++ - Qt:发出信号时不调用信号处理程序

c++ - Qt GUI 数学应用程序在计算时挂出 GUI

C++ ifstream/fstream 破坏数据

c++ - 如何检查类型是否提供具有算术类型的函数

qt - 有没有办法访问 QWidget 后备存储中的图像?

c++ - 在 Qt 中创建和存储调查

visual-studio-2010 - 如何使用 Visual C++ 2010 Express 从 32 位环境为 64 位 Windows 编译 Qt?