2011-01-25 69 views
0

請檢查下面的實現:重新實現resizeEvent()不叫

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

你是說這個視圖是正確縮放的,但是沒有調用實際縮放比例的函數`BoardView :: resizeEvent`嗎?你在其他地方擴展嗎? – 2011-01-25 01:56:48

+0

@ak,董事會根本沒有縮放。 `BoardView :: resizeEvent()`沒有被調用。 `qDebug()`不輸出任何東西。我在說的是,我在一個完全不同的項目中使用完全相同的文件,其中`BoardView :: resizeEvent()`被調用並且電路板正確縮放。 – Donotalo 2011-01-25 04:06:05

回答

0

爲什麼BoardView::resizeEvent()不叫,但QGraphicsView顯示QGraphicsScene正確?原因是一個愚蠢的錯誤,而不是

BoardView _board_view; 

我寫

QGraphicsView _board_view; 

對不起張貼這麼愚蠢的問題!

0

嗯...你錯過了一些代碼嗎? 或者你的類聲明是不正確 - 你應該將其更改爲

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

很抱歉,如果這是你省略,因爲瑣碎的,但我不知道你的QT經驗水平。這可能是爲什麼QT事件與你的班級工作不正確的原因...