2011-01-25 6 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); 
} 

上記の2つのファイルが直接あり既存のプロジェクト、たとえばP1からコピーされます。このコードの目的は、resizeEvent()を処理し、ウィジェットのサイズに応じてビューを拡大/縮小することです。

問題は、これはプロジェクトP1の場合とまったく同じです。期待どおりにすべてがスケーリングされます。しかし、resizeEvent()は、ウィジェットであるメインウィンドウのサイズを変更してビューのサイズを変更すると、新しいプロジェクトから呼び出されません。

BoardViewオブジェクトは、他のすべてを期待通りに実行します。それはシーンを示しています。それは捕獲し、シーンにマウスイベントを渡します。resizeEvent()だけが呼び出されません。

私は間違っていますか?

Windows 7 Ultimate 32ビットでQt Creator 2.0.1、Qt 4.7 32ビットを使用しています。

+0

ビューが正しくスケーリングされていますが、実際のスケーリングを行う 'BoardView :: resizeEvent'関数は呼び出されていませんか?あなたは他のどこかでそれを拡大しますか? –

+0

@ak、ボードのスケールはまったく変わりません。 'BoardView :: resizeEvent()'が呼び出されていません。 'qDebug()'は何も出力しません。私が言っているのは、 'BoardView :: resizeEvent()'が呼び出され、ボードが適切にスケーリングされている完全に異なるプロジェクトで、まったく同じファイルを使用しているということです。 – Donotalo

+0

@Donotalo:あなたが問題を示し、私たちが試すことができる小さなQtプロジェクトがありますか? –

答えて

0

なぜBoardView::resizeEvent()は呼び出されませんが、QGraphicsViewQGraphicsSceneを正しく表示していましたか?その理由は、私は、このような愚かな質問を投稿して申し訳ありません

QGraphicsView _board_view; 

を書いたのではなく、

BoardView _board_view; 

愚かな間違いです!

0

うーん...ここにコードがありませんか? またはあなたのクラス宣言は間違っている - これが理由つまらないのあなたでは省略されている場合は、申し訳ありません

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

に変更する必要がありますが、私はあなたのQT経験レベルを知りません。これはあなたのクラスでQTイベントが正しく動作しない理由です...

+0

別のプロジェクトでは、ファイルのコピーはまったく同じであることに注意してください。 – Donotalo

+0

他のどこかで動作するということは、コードが正常であるということを意味するものではありません。この答えでは良い点があります:元のコードでは、 'BoardView :: BoardView(){}'は呼び出されず、 'BoardView :: BoardView():QGraphicsView(){ } '。シグナル/スロット/メタ機能を初期化するので、Q_OBJECTは必要ありません。 –

+0

@ak:デフォルトコンストラクタは 'QGraphicsView()'に対して自動的に呼び出されます。すべきではない? – Donotalo

関連する問題