請檢查下面的實現:重新實現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位。
你是說這個視圖是正確縮放的,但是沒有調用實際縮放比例的函數`BoardView :: resizeEvent`嗎?你在其他地方擴展嗎? – 2011-01-25 01:56:48
@ak,董事會根本沒有縮放。 `BoardView :: resizeEvent()`沒有被調用。 `qDebug()`不輸出任何東西。我在說的是,我在一個完全不同的項目中使用完全相同的文件,其中`BoardView :: resizeEvent()`被調用並且電路板正確縮放。 – Donotalo 2011-01-25 04:06:05