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 qmake
relativamente 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.pro
Este es el archivo del proyecto.Headers
directorio para archivos de encabezadoSources
para almacenar el código fuenteForms
Se utiliza para almacenar.ui
archivos, es decir, archivos de diseño de interfaz.
Haga doble clic en Forms
el archivo a continuación para mainwindow.ui
ingresar 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 geometry
y, después de la expansión, establecer el ancho y el alto en 400
y respectivamente 200
.
Luego, arrastre la Buttons
parte inferior izquierda Push Button
a la ventana principal y luego Push Button
las diversas propiedades que puede ver a la derecha. Cambie el QObject
medio objectName
a pbStart
; cambie el QAbstractButton
inferior text
a start
. Se utiliza un momento para empezar a cronometrar.
Busque a la izquierda LCD
, LCD Number
arrástrelo a la ventana principal y cambie el nombre para Timer
mostrar 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
A continuación, para implementar la función central del temporizador: el tiempo, debe escribir c++
código. Primero, en el .h
archivo, 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 start
botó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.h
contenido 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 .cpp
implementarlo 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();
}
}