繁体   English   中英

在另一个(父)内绘制一个小部件的问题

[英]problem with painting one widget inside another one (parent)

我想在Qt 4.6下做一个简单的游戏。 我们的想法是拥有两个小部件,一个是主窗口小部件,代表空间,第二个小部件是空间(父级)内的星舰小部件。 简化代码如下所示:

/*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在线文档并做了一些谷歌研究没有运气。 对此有任何解释都是受欢迎的。 我想在另一个(父)上绘制一个小部件。

QPainter painter(itsParent); - 错了。 您应该只在这个小部件的表面上绘制,而不是在父级上绘制。 如此正确将是QPainter painter(this);
•您应该保存部件的身体MyRect类。 类空间必须保持其大小和位置。 所以在MyRect::paintEvent()改变painter.drawRect(*body); to 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 );

瞧。
替代文字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM