未调用重新实现的resizeEvent()

时间:2011-01-25 01:43:42

标签: c++ qt

请检查以下实施:

BoardView.h

#include <QGraphicsView>

class BoardView : public QGraphicsView
{
protected:
    void        resizeEvent(QResizeEvent* event);

public:
    BoardView();
};

BoardView.cpp

BoardView::BoardView()
{
}

void BoardView::resizeEvent(QResizeEvent* event)
{
    QGraphicsView::resizeEvent(event);

    double wd = width();
    double ht = height();
    double min_wh = min(wd, ht);

    qDebug() << min_wh;

    QTransform transform;
    transform.scale(min_wh / Options::getMainBoardMinSize(), min_wh / Options::getMainBoardMinSize());
    setTransform(transform);
}

上述两个文件直接从现有项目中复制,比如P1。此代码的目的是处理resizeEvent()并根据窗口小部件大小缩放视图。

问题是,这与项目P1中应该完全一样。一切都按预期进行缩放。但是,当通过调整主窗口大小来调整视图大小时,根本不会从新项目中调用resizeEvent()

BoardView对象按预期执行其他所有操作。它显示了场景。它捕获并将鼠标事件传递给场景等。仅调用resizeEvent()

我做错了什么?

我在Windows 7 Ultimate 32位上使用Qt Creator 2.0.1,Qt 4.7 32位。

2 个答案:

答案 0 :(得分:0)

嗯......你在这里错过了一些代码吗? 或者您的班级声明不正确 - 您应该将其更改为

class BoardView : public QGraphicsView
{
    Q_OBJECT
...
public:
    BoardView(QWidget* parent);
};
...
BoardView::BoardView(QWidget* parent):QGraphicsView(parent)
{
}

很抱歉,如果您因为琐碎而忽略了这一点,但我不知道您的QT体验级别。这可能就是为什么QT事件与你的班级错误合作的原因......

答案 1 :(得分:0)

为什么BoardView::resizeEvent()未被调用,但QGraphicsView正确显示QGraphicsScene?原因是一个愚蠢的错误,而不是

BoardView _board_view;

我写了

QGraphicsView _board_view;

很抱歉发布这么愚蠢的问题!