2010-12-11 5 views
3

Qt 4.6で簡単なゲームを作ろうとしています。アイデアは2つのウィジェットを持つことです.1つはメインウィンドウウィジェットで、スペースを表し、2つ目はスペース(親)内のスターシップウィジェットです。 簡素化されたコードは次のようになります別の1つのウィジェットを別のペイントにペイントする際の問題

私はコンパイル
/*this is ship and child widget*/ 
class MyRect : public QWidget { 

Q_OBJECT 

public: 
MyRect(QWidget* parent) 
    : QWidget(parent) 
{ 
    itsParent = parent; 

    itsx = 120; 
    itsy = 250; 
    itsw = 110; 
    itsh = 35; 
    body = new QRect(itsx, itsy, itsw, itsh); 

} 

~MyRect() {} 


protected: 
    void paintEvent(QPaintEvent *event); 

private: 
int itsx; 
int itsy; 
int itsw; 
int itsh; 
QRect* body; 
QWidget* itsParent; 

}; 


void MyRect::paintEvent(QPaintEvent *event) 
{ 

    QPen pen(Qt::black, 2, Qt::SolidLine); 
    QColor hourColor(0, 255, 0); 


    QPainter painter(itsParent); 

    painter.setBrush(hourColor); 
    painter.setPen(pen); 
    painter.drawRect(*body); 

} 


/*this is space and main window widget*/ 
class space : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    space(QWidget *parent = 0); 
    ~space(); 

protected: 


private: 
    MyRect* ship; 

}; 

space::space(QWidget *parent) 
: QMainWindow(parent) 
{ 
    ship = new MyRect(this); 
} 

、画面が空白で、長方形MyRect::bodyが描かれていません。 私はQtのオンラインドキュメントをチェックし、運がないGoogleの調査をしました。 これについての説明は大歓迎です。私は別の(親)に1つのウィジェットを描きたい。

+1

QGraphicsViewもご覧ください。 –

答えて

3

QPainter painter(itsParent); - 間違っています。あなたはこのウィジェットの表面だけを描き、親では描かないようにしてください。そうすれば正しいでしょうQPainter painter(this);
ではなく、 MyRectクラスの本体を保存してください。クラス空間はその大きさと位置を保持しなければならない。だからMyRect::paintEvent()に変更painter.drawRect(*body);からpainter.drawRect(rect());
•クラスMyRectにはメンバーがまったくないはずです。最後•
が残った:space::space()
ship->move(120, 250);
ship->resize(110, 35);
QPalette pal = palette();
pal.setColor(QPalette::Background, Qt::black); // space is black, isn't it?
setPalette(pal);
resize(500, 500);

と出来上がりを追加します。
alt text

+1

答えが大変ありがとうございます。私は女の子のノートブックから書いています。私は家に帰るまでコンパイルをやり直していますが、これはいいと思います.BTW、私はクロアチア(都市ザグレブ)に住んでいます。ここで最高の盛り上がりを見せてくれます。 –

関連する問題