我试图在程序执行期间尽可能缩短代码我输入对象Widget的地址。它没有改变。这意味着Widget的地址正确传递。
无处不在,我输入Widget的地址,我收到相同的地址。这是代码:
标题小部件
class Widget : public QWidget
{
public:
int mi,mcount;
Widget(QWidget *parent = 0);
QPaintEvent *ev;
virtual void paintEvent(QPaintEvent *);
void drawcircle();
};
Widget.cpp
Widget::Widget(QWidget *parent) : QWidget(parent)
{
QWidget::paintEvent(ev);
qDebug()<<this<<"\n"; //
}
void Widget::drawcircle()
{
QPainter paint(this);
paint.drawEllipse(0,0,100,100);
}
void Widget::paintEvent(QPaintEvent *ev)
{ this->drawcircle(); }
标题Circle.h
class Circle :public QWidget
{
public:
Circle(Widget *widget); // i do trick here!!!
Widget *mwidg;
QPaintEvent *ev;
virtual void paintEvent(QPaintEvent *);
void drawcircle(Widget *mwidg);
};
Circle.cpp
Circle::Circle(Widget *widget)
{
qDebug()<<"circle widget"<<widget;
QWidget::paintEvent(ev);
mwidg=widget;
qDebug()<<"\n"<<mwidg;
}
void Circle::paintEvent(QPaintEvent *ev)
{ qDebug()<<"circle paintEvent mwidget"<<mwidg<<"\n";
this->drawcircle(mwidg);
}
void Circle::drawcircle(Widget *mwidg)
{
QPainter paint(mwidg);
paint.drawEllipse(20,10,40,40);
paint.drawLine(0,0,500,500);
}
主
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget *w=new Widget;
qDebug()<<"main address of widget"<<w<<"\n";
Circle *f=new Circle(w);
w->show();
return a.exec();
}
程序已编译并成功链接
答案 0 :(得分:0)
你到底想要达到什么目的?你只能在它自己的paintEvent()处理程序中的任何窗口小部件上绘制,你不应该自己调用paintEvent(),它不会工作。另外,摆脱QPaintEvent成员变量。
我建议你让Circle成为Widget的孩子,然后从Circle :: paintEvent()中绘制圆圈。或者,使用QGraphicsView。
答案 1 :(得分:0)
这 - &gt;的setParent(插件);
在costructor Circle :: Circle中,如果有人想看到我的解决方案,可以看到数字被移动
源代码在这里source code