Russian Qt Forum
Май 03, 2024, 10:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа закрывается по ошибке при старте таймера. (QT 4.6.0)  (Прочитано 4169 раз)
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;
...


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



Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 586


Просмотр профиля
« Ответ #1 : Февраль 26, 2010, 09:41 »

Убери QTimer * из конструктора.

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

QTimer * ptimer  в конструкторе это локальная переменная для конструктора.
Ничего общего не имеющая с членом класса QTimer * ptimer.
Записан
ymb
Гость
« Ответ #2 : Февраль 26, 2010, 09:49 »

Спасибо.
Сделал так:
в mainwindow.h
Код:
QTimer ptimer;
в mainwindow.cpp
в конструкторе формы:
Код:
connect(&ptimer,SIGNAL(timeout()),this,SLOT(PrintMess()));
тогда в любом месте управление таймером:
Код:
ptimer.start(1000);
...
ptimer.stop();
так работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.