QTでタイマーを実装する

最初に新しいプロジェクトを作成し、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真ん中objectNamepbStart;に変更し、QAbstractButtontextに変更しstartます。タイミングを開始するためにモーメントが使用されます。

左側を検索してメインウィンドウLCDLCD 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();
    }
}

おすすめ

転載: blog.csdn.net/m0_37816922/article/details/123607939