请检查以下实施:
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位。
答案 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;
很抱歉发布这么愚蠢的问题!