Implementar un temporizador con QT

Primero cree un nuevo proyecto, Ctrl+ N-> Application(Qt)-> Qt Widgets Application, y luego ingrese a la interfaz de configuración, el nombre y la ruta son opcionales; el sistema de compilación es qmakerelativamente simple de usar, independientemente del rendimiento; el resto son solo las opciones predeterminadas.

Después de la inicialización, sus archivos de proyecto se organizan de la siguiente manera

  • Timer.proEste es el archivo del proyecto.
  • Headersdirectorio para archivos de encabezado
  • Sourcespara almacenar el código fuente
  • FormsSe utiliza para almacenar .uiarchivos, es decir, archivos de diseño de interfaz.

Haga doble clic en Formsel archivo a continuación para mainwindow.uiingresar a la interfaz de edición de la interfaz gráfica de usuario, con varios controles a la izquierda y la ventana principal de diseño del programa en el medio. Dado que un temporizador no necesita ser demasiado grande, puede arrastrar directamente los tres puntos en la esquina inferior derecha de la ventana para cambiar su tamaño. También se puede ubicar en la barra de propiedades a la derecha geometryy, después de la expansión, establecer el ancho y el alto en 400y respectivamente 200.

Luego, arrastre la Buttonsparte inferior izquierda Push Buttona la ventana principal y luego Push Buttonlas diversas propiedades que puede ver a la derecha. Cambie el QObjectmedio objectNamea pbStart; cambie el QAbstractButtoninferior texta start. Se utiliza un momento para empezar a cronometrar.

Busque a la izquierda LCD, LCD Numberarrástrelo a la ventana principal y cambie el nombre para Timermostrar la hora.

En este momento, la tercera pestaña está seleccionada en la pestaña más a la izquierda 设计. Si hace clic en la segunda 编辑, puede editar directamente el archivo de diseño de la ventana mainWindow.ui, pero es solo para que la gente lo vea, no para editar. Pero en resumen, hasta ahora se ha escrito una interfaz de usuario simple

inserte la descripción de la imagen aquí

A continuación, para implementar la función central del temporizador: el tiempo, debe escribir c++código. Primero, en el .harchivo, escriba las variables miembro requeridas. Teniendo en cuenta que se va a implementar la función del temporizador, se requiere al menos un reloj para cronometrar y un número entero que pueda registrar la cantidad de segundos. Ingrese ,mainWindow.h ingrese los miembros a continuación y, por supuesto, no olvide importar el archivo de encabezado, el resultado final esprivate:

private:
    Ui::MainWindow *ui;
    QTimer * timer;
    QTime * TimeRecord;

Además de las variables miembro, también existen funciones miembro. El tiempo debe vincularse a una función, el startbotón debe vincularse a uno y el tiempo a cero debe vincularse a uno, por lo que se requieren tres funciones miembro y el mainWindow.hcontenido final es

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QTime>

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow{
    
    
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void initTime();
    void updateTime();
    void pbStart_clicked();
private:
    Ui::MainWindow *ui;
    QTimer * timer;
    QTime * TimeRecord;
};
#endif // MAINWINDOW_H

Después de definir el archivo de encabezado, el siguiente paso es .cppimplementarlo en detalle, hay menos de 50 líneas de código en total, de la siguiente manera:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent) , ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);
    timer = new QTimer;
    TimeRecord = new QTime;
    ui->Timer->setDigitCount(8);
    initTime();     //令LCD显示00:00:00
    //连接槽函数,将timer的timeout行为,连接到updateTime函数中
    connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
    //当点击(clicked)pbStart时,调用函数pbStart_clicked
    connect(ui->pbStart, SIGNAL(clicked()), this, SLOT(pbStart_clicked()));
}

MainWindow::~MainWindow(){
    
    
    delete ui;
}

void MainWindow::initTime(){
    
    
    TimeRecord->setHMS(0, 0, 0); //时间复位为0
    ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
}

void MainWindow::updateTime(){
    
    
    //每次更新时间,TimeRecord增加1
    *TimeRecord = TimeRecord->addSecs(1);
    ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
}

void MainWindow::pbStart_clicked(){
    
    
    if (QString::compare(ui->pbStart->text(),"stop")){
    
    
        //当按钮内容不为'stop'时,说明开启计时
        timer->start(1000);
        ui->pbStart->setText("stop");//计时开始后,按钮变为'stop'
    }else{
    
    
        timer->stop();
        ui->pbStart->setText("start");
        initTime();
    }
}

Supongo que te gusta

Origin blog.csdn.net/m0_37816922/article/details/123607939
Recomendado
Clasificación