最初に新しいプロジェクトを作成し、Ctrl
+ N
-> Application(Qt)
-> Qt Widgets Application
、次に設定インターフェイスに入ります。名前とパスはオプションです。ビルドシステムはqmake
パフォーマンスに関係なく比較的簡単に使用できます。残りはデフォルトのオプションです。
初期化後、そのプロジェクトファイルは次のように編成されます
Timer.pro
これはプロジェクトファイルですHeaders
ヘッダーファイルのディレクトリSources
ソースコードを保存するためForms
.ui
ファイル、つまりインターフェイスデザインファイルを保存するために使用されます
Forms
下のファイルをダブルクリックmainwindow.ui
して、左側にさまざまなコントロールがあり、中央にプログラム設計のメインウィンドウがあるグラフィカルUI編集インターフェイスに入ります。タイマーは大きすぎる必要がないため、ウィンドウの右下隅にある3つのドットを直接ドラッグして、サイズを変更できます。右側のプロパティバーに配置することもできます。geometry
拡張後、幅と高さ400
をそれぞれとに設定します200
。
次に、Buttons
左下Push Button
をメインウィンドウにドラッグしてからPush Button
、右側に表示されるさまざまなプロパティをドラッグします。QObject
真ん中objectName
をpbStart
;に変更し、下QAbstractButton
をtext
に変更しstart
ます。タイミングを開始するためにモーメントが使用されます。
左側を検索してメインウィンドウLCD
にLCD Number
ドラッグし、名前を変更しTimer
て時刻を表示します。
このとき、左端のタブで3番目のタブが選択されてい设计
ます。2番目のタブをクリック编辑
すると、ウィンドウデザインファイルを直接編集できますが、編集はmainWindow.ui
できません。しかし、要するに、これまでのところ単純なUIが作成されています
次に、タイマーのコア機能であるタイミングを実装するには、c++
コードを記述する必要があります。まず、.h
ファイルに必要なメンバー変数を書き込みます。タイマーの機能を実装することを考えると、少なくともタイミング用の時計と秒数を記録できる整数が必要です。したがって、をmainWindow.h
入力し、以下にメンバーを入力します。もちろん、ヘッダーファイルをインポートすることを忘れないでください。最終結果は次のようになります。private:
private:
Ui::MainWindow *ui;
QTimer * timer;
QTime * TimeRecord;
メンバー変数に加えて、メンバー関数もあります。タイミングは関数にバインドするstart
必要があり、ボタンは1にバインドする必要があり、ゼロまでの時間は1にバインドする必要があるため、3つのメンバー関数が必要であり、最終的なmainWindow.h
コンテンツは
#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
ヘッダーファイルを定義したら、次のステップは.cpp
それを詳細に実装することです。次のように、合計で50行未満のコードがあります。
#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();
}
}