Qt在一个窗口绘制数字

时间:2011-05-29 20:25:07

标签: c++ qt qpainter

  1. 我创建了类Widget,它创建了窗口,这个类在窗口上绘制了一些东西(即它可以按我的意愿工作)。
  2. 我创建了一个类,Circle,我想在类Widget的窗口上绘画。
  3. 我通过Widget的地址并尝试使用QPainter绘画(Widget的地址)在Widget上绘画; (在Circle的例子中)但我没有看到任何东西。
  4. 我试图在程序执行期间尽可能缩短代码我输入对象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();
            }
    

    程序已编译并成功链接

2 个答案:

答案 0 :(得分:0)

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

我建议你让Circle成为Widget的孩子,然后从Circle :: paintEvent()中绘制圆圈。或者,使用QGraphicsView。

答案 1 :(得分:0)

好吧,谢谢你的帮助  但我需要的只是:

这 - &gt;的setParent(插件);

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

源代码在这里source code

enter image description here