Russian Qt Forum

Qt => Общие вопросы => Тема начата: ymb от Февраль 26, 2010, 09:22



Название: Программа закрывается по ошибке при старте таймера. (QT 4.6.0)
Отправлено: ymb от Февраль 26, 2010, 09:22
Таймер работает только в таком виде:

код:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QTimer *ptimer = new QTimer(this);
    ptimer->start(500);

    connect(ptimer,SIGNAL(timeout()),this,SLOT(PrintMess()));

}

...

void MainWindow::PrintMess()
{
    ui->textEdit->append(tr(MyMessage.toAscii()));
}

...

Т.е. создавать и запускать его надо в конструкторе формы.

Если я запускаю таймер в другом месте, компилятор ругается, что переменная не объявлена.
Добавляю в mainwindow.h
Код:
...
private:
    Ui::MainWindow *ui;

    QTimer *ptimer;
...


Запускаю в другом месте. Тогда программа сваливается с ошибкой.
Конечно можно разрешать исполнение события таймера по флагу, но если будет несколько таймеров, то это неудобно.
Как правильно запустить и остановить таймер?





Название: Re: Программа закрывается по ошибке при старте таймера. (QT 4.6.0)
Отправлено: Mikhail от Февраль 26, 2010, 09:41
Убери QTimer * из конструктора.

При твоем коде

QTimer * ptimer  в конструкторе это локальная переменная для конструктора.
Ничего общего не имеющая с членом класса QTimer * ptimer.


Название: Re: Программа закрывается по ошибке при старте таймера. (QT 4.6.0)
Отправлено: ymb от Февраль 26, 2010, 09:49
Спасибо.
Сделал так:
в mainwindow.h
Код:
QTimer ptimer;
в mainwindow.cpp
в конструкторе формы:
Код:
connect(&ptimer,SIGNAL(timeout()),this,SLOT(PrintMess()));
тогда в любом месте управление таймером:
Код:
ptimer.start(1000);
...
ptimer.stop();
так работает.