У меня есть QMainWindow
, который соединяет 2 кнопки с 2 функциями. Я хочу запустить QTimer с помощью функции StartBTNClick
и остановить QTimer с помощью функции StopBTNClick
. Моя проблема в том, что QTimer не определен в StopBTNClick
, поэтому я хочу знать, как определить открытый QTimer. (. Кстати, я новичок в C++, пожалуйста, медведь со мной)Сделать QTimer общедоступным. (Qt, C++)
Это мой код до сих пор:
MyClass::MainWindow(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
statusBar()->showMessage("Status: Idle.");
connect(ui.StartBTN, SIGNAL(clicked()), this, SLOT(StartBTNClick()));
connect(ui.StopBTN, SIGNAL(clicked()), this, SLOT(StopBTNClick()));
}
void MyClass::StartBTNClick()
{
QTimer *RunTimer = new QTimer(this);
connect(RunTimer, SIGNAL(timeout()), this, SLOT(TimerHandler()));
RunTimer->start(5000);
statusBar()->showMessage("Status: Running.");
}
void MyClass::StopBTNClick()
{
RunTimer->stop(); // Not working. Says it's not defined.
disconnect(RunTimer, SIGNAL(timeout()), this, SLOT(TimerHandler()));
statusBar()->showMessage("Status: Idle.");
}
void MyClass::TimerHandler()
{
// I set QMessageBox to test if it's working.
QMessageBox::information(this, "lala", "nomnom");
}
Работает как очарование сейчас, спасибо. :) Я сделал новый bool и команду if на 'StopBTNClick', чтобы проверить, запущен ли QTimer. ^^ – HitomiTenshi
1. Вам не нужно bool, вместо этого вы можете использовать runTimer-> isActive(). 2. Вам не нужно отключать соединение sig/slot каждый раз. Вы должны в своем классе создать свой таймер и подключить его. 3. Вы можете отключить кнопку запуска после запуска и включить кнопку останова и наоборот на остановке –
Камиль прав, это был бы лучший способ пойти. То, как вы это делаете, может работать и может понадобиться в особых случаях, но, вероятно, не в вашем случае. – tmpearce