Сделайте QTimer переменной-членом вашего класса, и она будет доступна для обеих функций.
class MyClass
{
... //other variables and method definitions
QTimer* runTimer;
};
Используйте указатель на член класса, а не локально определенный:
void MyClass::StartBTNClick()
{
runTimer = new QTimer(this);//this would work, but it may be better to
//initialize the timer in the constructor
connect(runTimer, SIGNAL(timeout()), this, SLOT(TimerHandler()));
runTimer->start(5000);
statusBar()->showMessage("Status: Running.");
}
void MyClass::StopBTNClick()
{
runTimer->stop(); // this will work now; if it hasn't been initialized, though,
// you will cause a crash.
disconnect(RunTimer, SIGNAL(timeout()), this, SLOT(TimerHandler()));
statusBar()->showMessage("Status: Idle.");
}
Вероятно, было бы лучше инициализировать время (runTimer = new QTimer (this)) в конструкторе, а не по нажатию кнопки, и просто запускать таймер при нажатии кнопки.Если вы не сделаете это таким образом, вам придется остерегаться использования неинициализированного указателя в StopBTNClick () в случае нажатия этой кнопки перед кнопкой «Пуск».