Я создаю небольшую программу, которая показывает светофорные изображения с использованием QTimer. Поэтому я настраиваю свой таймер, и все работает хорошо. Но я не могу понять, как я могу заставить Робот-огни -> show() и -> hide() каждый раз, когда достигается интервал таймера. Я могу все это ошибаться, я все еще учился, поэтому, пожалуйста, советую.Trigger different event on QTimer reset
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void timer();
QTimer *mytimer;
private:
Ui::MainWindow *ui;
int timerValue;
private slots:
void showGreen();
void showYellow();
void showRed();
void on_startButton_clicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->green->setVisible(false);
ui->yellow->setVisible(false);
ui->red->setVisible(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timer(){
ui->green->setVisible(true);
mytimer = new QTimer(this);
connect(mytimer,SIGNAL(timeout()),this,SLOT(showYellow()));
mytimer->start(timerValue = (ui->spinBox->value())*1000);
}
void MainWindow::showYellow(){
ui->yellow->setVisible(true);
mytimer = new QTimer(this);
connect(mytimer,SIGNAL(timeout()),this,SLOT(showRed()));
mytimer->start(timerValue);
}
void MainWindow::showRed(){
ui->red->setVisible(true);
mytimer = new QTimer(this);
connect(mytimer,SIGNAL(timeout()),this,SLOT(showGreen));
mytimer->start(timerValue);
}
void MainWindow::showGreen(){
ui->green->setVisible(true);
mytimer = new QTimer(this);
connect(mytimer,SIGNAL(timeout()),this,SLOT(showYellow()));
mytimer->start(timerValue);
}
void MainWindow::on_startButton_clicked()
{
timer();
ui->startButton->setEnabled(false);
}
Я также отключить кнопку Start при нажатии поэтому таймер не может работать в два раза.
Таким образом, в главном окне пользовательского интерфейса я использую Spinbox, который принимает вход пользователя, который является передачей времени Qtimer, а затем у меня есть 3 изображения с огнями красного зеленого желтого цвета, которые должны отображаться и скрыть в интервалах. Поэтому я создал почти что-то вроде ручного цикла. Qtimer запускает и показывает «Зеленый», затем переходит в «ShowYellow Slot», а затем «showRed», поэтому теперь он должен перейти в «Зеленый» слот, а затем на желтый, но он снова не переходит в «Зеленый».
Может кто-нибудь сказать мне, почему бы и нет.
Im не на самом деле после того, что ваше высказывания. Будет ли это решить мою проблему показа и скрыть изображения? или это просто лучшая практика моей программы? – Vaaljan
Наличие нескольких таймеров, вызывающих один и тот же слот, - это не просто плохая практика, это проблема. @Wintermute показывает, как вы можете переключать видимость изображения. – svlasov
Я исправил эту проблему, отключив кнопку, когда пользователь на нее нажимает. в соответствии с назначением, таймер не должен останавливаться, если он не закрыт, так что теперь это нормально. У меня все еще есть проблема, не могли бы вы оставить комментарий к новому редактированию, которое я сделал для вопроса/кода. – Vaaljan