• 4888阅读
  • 6回复

[提问]定时器问题 [复制链接]

上一主题 下一主题
离线marxmax
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-05
— 本帖被 XChinux 从 C/C++基础 移动到本区(2011-05-07) —
我想用run()和end()两个函数控制定时器 现在是程序运行起来就会自己画波形 一按按钮就被windows报错关闭
程序部分在下面 求各位大侠指教 急!
Form::Form(QWidget * parent)
        : QWidget(parent)
{ startBtn = new QPushButton(tr("start"),this);
    startBtn->setGeometry(300,100,60,40);
    stopBtn = new QPushButton(tr("stop"),this);
    stopBtn->setGeometry(300,160,60,40);

    connect(startBtn,SIGNAL(clicked()),this,SLOT(run()));
    connect(stopBtn,SIGNAL(clicked()),this,SLOT(end()));

    for(int i=0;i<200;i++){
        buffer1=(int)(sin((i*PI)/100)*50); }
    QTimer *timer1 = new QTimer(this);
        connect(timer1,SIGNAL(timeout()),this,SLOT(flushBuff1()));
         timer1->start(50);

for(int j=0;j<101;j++){
       buffer2[j]=(int) j; }
    for(int j=101;j<200;j++){
      buffer2[j]=(int)(200-j); }
    QTimer *timer2 = new QTimer(this);
        connect(timer2,SIGNAL(timeout()),this,SLOT(flushBuff2()));
         timer2->start(50); }

void Form::run()
{  timer1->start();
    timer2->start();}

void Form::end()
{timer1->stop();
    timer2->stop();}

void Form::flushBuff1()
{int tmp=buffer1[0];
    for(int i=0;i<200;i++){
     buffer1=buffer1[i+1];}
    buffer1[199]=tmp;
    repaint(0,0,200,300);}

void Form::flushBuff2()
{int t=buffer2[0];
    for(int j=0;j<200;j++){
     buffer2[j]=buffer2[j+1];}
    buffer2[199]=t;
    repaint(0,0,200,300);}
[ 此帖被marxmax在2011-05-05 21:22重新编辑 ]
离线pan356
只看该作者 1楼 发表于: 2011-05-05
run()槽中的start参数是空的,给它一个值
离线marxmax
只看该作者 2楼 发表于: 2011-05-05
不行啊 我加了时间问题还是一样的
离线jdwx

只看该作者 3楼 发表于: 2011-05-05
Timer1和Timer都在构造函数中声明的,构造函数执行完就被销毁了。
void Form::run()
{  timer1->start();
    timer2->start();}这里的Timer1和Timer2都是不存在的。
应该放到头文件里声明。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线marxmax
只看该作者 4楼 发表于: 2011-05-05
你能说得具体一点吗 小弟菜鸟....
离线ppdayz

只看该作者 5楼 发表于: 2011-05-06
回 4楼(marxmax) 的帖子
    for(int i=0;i<200;i++){
        buffer1=(int)(sin((i*PI)/100)*50); }
    QTimer *timer1 = new QTimer(this);
        connect(timer1,SIGNAL(timeout()),this,SLOT(flushBuff1()));
         timer1->start(50);

for(int j=0;j<101;j++){
       buffer2[j]=(int) j; }
    for(int j=101;j<200;j++){
      buffer2[j]=(int)(200-j); }
    QTimer *timer2 = new QTimer(this);
        connect(timer2,SIGNAL(timeout()),this,SLOT(flushBuff2()));
         timer2->start(50); }

改成
    for(int i=0;i<200;i++){
        buffer1=(int)(sin((i*PI)/100)*50); }
    timer1 = new QTimer(this);        connect(timer1,SIGNAL(timeout()),this,SLOT(flushBuff1()));
         timer1->start(50);

for(int j=0;j<101;j++){
       buffer2[j]=(int) j; }
    for(int j=101;j<200;j++){
      buffer2[j]=(int)(200-j); }
    timer2 = new QTimer(this);        connect(timer2,SIGNAL(timeout()),this,SLOT(flushBuff2()));
         timer2->start(50); }

然后在头文件中声明
QTimer *timer2;

QTimer *timer1;

离线marxmax
只看该作者 6楼 发表于: 2011-05-06
恩 我按照你的方法改了 现在按stopBtn可以暂停了
快速回复
限100 字节
 
上一个 下一个