0
  1. 我创建了类 Widget,它创建了窗口,这个类在窗口上绘制了一些东西(即它按我的意愿工作)。
  2. 我创建了一个类,Circle,我想在类 Widget 的窗口上绘画。
  3. 我传递了 Widget 的地址并尝试使用 QPainter paint(Widget 的地址)在 Widget 上绘画;(以 Circle 为例)但我什么也没看到。

在程序执行期间,我尝试使代码尽可能短,我键入对象 Widget 的地址。它没有改变。这意味着Widget的地址是正确传递的。

在任何地方,当我输入 Widget 的地址时,我都会收到相同的地址。这是代码:

标题小部件

            class Widget : public QWidget
            {
                public:
                int  mi,mcount;
                Widget(QWidget *parent = 0);
                QPaintEvent *ev;
                virtual void paintEvent(QPaintEvent *);
            void drawcircle();
            };

小部件.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);
        };

圈子.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();
        }

程序编译链接成功

4

2 回答 2

0

你到底想达到什么目的?您只能在它自己的paintEvent() 处理程序中的任何小部件上进行绘制,并且您不应该自己调用paintEvent(),它不会起作用。此外,摆脱 QPaintEvent 成员变量。

我建议您将 Circle 设为 Widget 的子级,然后从 Circle::paintEvent() 绘制圆圈。或者,使用 QGraphicsView。

于 2011-05-30T09:58:59.810 回答
0

好吧,感谢您尝试提供帮助,但我所需要的一切:

这-> setParent(小部件);

在 costructor Circle::Circle 中,如果有人想看到我的解决方案,可以看到数字已移动

源代码在这里 源代码

在此处输入图像描述

于 2011-05-31T14:12:59.877 回答