c++ - 在另一个小部件(父级)中绘制一个小部件的问题

标签 c++ qt qt4

我正在尝试在 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); 更改为 painter.drawRect( rect() );
• 所以 MyRect 类应该没有任何成员。
• 剩下的最后一件事:在 space::space() 中添加
ship->move( 120, 250 );
ship->resize( 110, 35 );
QPalette pal = palette();
pal.setColor(QPalette::Background, Qt::black);//空格是黑色的,不是吗?
setPalette( pal );
调整大小( 500, 500 );

瞧瞧。
alt text

关于c++ - 在另一个小部件(父级)中绘制一个小部件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417915/

相关文章:

c++ - Opencv:二维条码(Data Matrix)检测

c++ - 如何从.cpp文件和makefile编译程序

qt - GUI 对话框的键盘控制 - 默认按钮是否应该随焦点变化?

c++ - Qt 中进程的有趣任务

c++ - QTableView 在每个单元格中都有不需要的复选框

qt4 - QT 4.5 - 更改 QGraphicsItem 的选择选取框

c++ - 有没有办法在 Qt4 中实现 OnReady() 回调?

c++ - Vulkan:转储当前分配的对象?

c++ - 编译器生成的赋值运算符不安全吗?

c++ - 将 Visual Studio 项目导出到 Qt 项目