首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTimer与QPaintEvent

QTimer与QPaintEvent
EN

Stack Overflow用户
提问于 2014-04-18 18:53:23
回答 2查看 2K关注 0票数 3

我创建了一个小的QT应用程序,它可以在任意位置重新绘制一个圆。我想要做的是重复这个方法--一个预定的次数,它每秒钟使用一个QTimer绘制圆圈

我不知道该怎么做。

这是我的main.cpp

代码语言:javascript
复制
int main(int argc, char *argv[]) {
    // initialize resources, if needed
    // Q_INIT_RESOURCE(resfile);

     srand (time(NULL));
    QApplication app(argc, argv);

    widget f;
    f.show();

    return app.exec();
}

widget.cpp

代码语言:javascript
复制
#include "widget.h"

widget::widget()
{
   widget.setupUi(this);
}
void widget::paintEvent(QPaintEvent * p)
{
QPainter painter(this);
//**code


   printcircle(& painter); //paints the circle

    //**code
}

void paintcircle(QPainter* painter)
{
   srand (time(NULL));
   int x = rand() %200 + 1;
   int y = rand() %200 + 1;

   QRectF myQRect(x,y,30,30);
   painter->drawEllipse(myQRect);


    }


widget::~widget()
{}

widget.h

代码语言:javascript
复制
#ifndef _WIDGET_H
#define _WIDGET_H

class widget : public QWidget {
    Q_OBJECT
public:
    widget();
    virtual ~widget();

public slots:
    void paintEvent(QPaintEvent * p);  
    private:
    Ui::widget widget;
};

#endif  /* _WIDGET_H */

我将如何创建一个Qtimer来重复print板球()方法。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-18 20:12:06

您可以在小部件类构造函数中创建定时器,如下所示:

代码语言:javascript
复制
 QTimer *timer = new QTimer(this);
 connect(timer, SIGNAL(timeout()), this, SLOT(update()));
 timer->start(1000);

也就是说,它将每秒钟调用小部件的画图事件。

票数 3
EN

Stack Overflow用户

发布于 2014-04-19 02:05:38

是的,为了实现这一点,您的代码中有几件事情需要修改:

  • 向前声明一个QTimer
  • 添加QTimer成员
  • 包括QTimer头。
  • 在小部件类的构造函数中设置一个连续的QTimer。
  • 请确保设置到update插槽的连接,以便事件循环计划重绘。
  • 您需要在预定的时间内添加一个计数器,因为QTimer中没有这样的特性。
  • 你需要把这个变量初始化为零。
  • 您需要在每个时隙呼叫中增加这个值。
  • 您需要停止发出QTimer的超时信号。

为了实现上述所有这些,您的代码将变成如下所示:

widget.cpp

代码语言:javascript
复制
#include "widget.h"

#include <QTimer>

// Could be any number
const static int myPredeterminedTimes = 10;

widget::widget()
    : m_timer(new QTimer(this))
    , m_count(0)
{
    widget.setupUi(this);
    connect(m_timer, SIGNAL(timeout()), SLOT(update()));
    timer->start(1000);
}
void widget::paintEvent(QPaintEvent * p)
{
QPainter painter(this);
//**code


   printcircle(& painter); //paints the circle

    //**code
}

void widget::paintcircle(QPainter* painter)
{
   srand (time(NULL));
   int x = rand() %200 + 1;
   int y = rand() %200 + 1;

   QRectF myQRect(x,y,30,30);
   painter->drawEllipse(myQRect);


    }


widget::~widget()
{}

widget.h

代码语言:javascript
复制
#ifndef _WIDGET_H
#define _WIDGET_H

class QTimer;

class widget : public QWidget {
    Q_OBJECT
public:
    widget();
    virtual ~widget();

public slots:
    void paintEvent(QPaintEvent * p);  
    private:
    Ui::widget widget;

private:
    QTimer *m_timer;
    int m_count;
};

#endif  /* _WIDGET_H */
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23160374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档