gpt4 book ai didi

c++ - QGraphicsScene 中没有显示任何内容

转载 作者:行者123 更新时间:2023-11-30 04:33:52 26 4
gpt4 key购买 nike

我正在尝试使用 qgraphicsview qgraphicsitem 来创建像国际象棋一样的场景。

我正在按照官方示例尝试创建它,但没有显示任何内容。代码几乎是一样的。首先,我想知道是我的 Cell 类。所以我只是试着画一个矩形。但是没有任何显示。下面是我的代码,有人可以帮助我吗?我在 Windows 7 上使用 Qt 4.7

单元格.h

class Cell : public QGraphicsItem
{
//Q_OBJECT;

public:
Cell(const QColor &color,int x, int y);
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
int x,y;
public:
QColor color;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};

细胞.cpp

Cell::Cell(const QColor &color, int x, int y)
{
this->x=x;
this->y=y;
this->color=color;
setAcceptedMouseButtons(Qt::LeftButton);

}

QRectF Cell::boundingRect() const
{
return QRectF(0,0,30,15);
}

void Cell::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{


QBrush b=painter->brush();
painter->setBrush(QColor::fromRgb(0,0,255));
painter->drawRect(0,0,30,15);
painter->fillRect(this->boundingRect(),QColor::fromRgb(0,0,255));
painter->setBrush(b);
return;
}

void Cell::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseMoveEvent(event);
this->color=QColor::fromRgb(0,0,0);
update();

}

View .h

class View : public QFrame
{
Q_OBJECT

public:
QGraphicsView *getview() const;

public:
View(QWidget *parent);
private:
QGraphicsView *graphicsView;
};

View .cpp

View::View(QWidget *parent)
:QFrame(parent)
{
graphicsView = new QGraphicsView;
graphicsView->setRenderHint(QPainter::Antialiasing, false);
graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState);
graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
}

QGraphicsView *View::getview() const
{
return graphicsView;
}

主窗口.h

class MainWindow : public QWidget
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
void populateScene();

QGraphicsScene *scene;
};

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)
{
populateScene();
View *v=new View(0);
v->getview()->setScene(scene);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(v);
setLayout(layout);
}

MainWindow::~MainWindow()
{
}

void MainWindow::populateScene()
{
scene=new QGraphicsScene();
for(int x=0;x<30;x++)
{
for(int y=0;y<20;y++)
{
QGraphicsItem *item=new Cell(QColor::fromRgb(0,255,255),30,15);
item->setPos(QPointF(30,15));
scene->addItem(item);
}
}
}

主要.cpp

QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();

最佳答案

您的 QFrame 并不“拥有”您的 QGraphicsView。所以它没有理由显示它里面的 View 。

只是替换

graphicsView = new QGraphicsView;

与:

graphicsView = new QGraphicsView(this);

并且不要忘记调整窗口大小(或在代码中设置最小大小)否则,您可能会认为它不起作用 =)

关于c++ - QGraphicsScene 中没有显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6341131/

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