2016-04-17 4 views
-1

QTでクロノメーターを作るのに苦労することはほとんどありません。ボタンを1つ押してから「HH:MM:SS」と表示されているQLabelで行う必要があります。それを行う簡単な方法がありますか?どうもありがとうございました!Qt/C++でクロノメーターを作成するには

+0

:あなたが望む最低秒であれば、やり過ぎの両方.qt.io/qt-5/qdatetime.html) –

+0

ボタンはタイマーを開始し、毎秒タイマーをトリガーし、毎秒QTimeに秒を追加します。QTime :: toString、QLabel :: setText – user3528438

+1

@ user3528438 - これはあまり正確ではありませんが、毎秒数ミリ秒の時間がかかります。 – dtech

答えて

1

QElapsedTimerを開始してください。その後、QTimerを開始し、タイムアウト信号をスロットに接続してelapsedTimer.elapsed()とし、タイマーの開始から数秒、数分、および数時間に変換し、ラベルを更新します。

class Chronometer { 
    QElapsedTimer t; 
    public: 
    void restart() { t.restart(); } 
    QTime getTime() { return QTime(0,0).addMSecs(t.elapsed()); } 
}; 

class ChronoUI : public QWidget { 
    Q_OBJECT 
    Chronometer c; 
    QTimer t; 
    QLabel * l; 
    QPushButton * startB, * stopB; 
    public: 
    ChronoUI() { 
     QVBoxLayout * ly = new QVBoxLayout; 
     setLayout(ly); 
     ly->addWidget(l = new QLabel(this)); 
     l->setText(QTime(0, 0).toString()); 
     ly->addWidget(startB = new QPushButton("start", this)); 
     ly->addWidget(stopB = new QPushButton("stop", this)); 
     connect(&t, SIGNAL(timeout()), this, SLOT(updateTime())); 
     connect(startB, SIGNAL(clicked(bool)), this, SLOT(start())); 
     connect(stopB, SIGNAL(clicked(bool)), &t, SLOT(stop())); 
    } 
    public slots: 
    void updateTime() { l->setText(c.getTime().toString()); } 
    void start() { 
     l->setText(QTime(0, 0).toString()); 
     c.restart(); 
     t.start(1000); 
    } 
}; 

それともQElapsedTimerを使用しない場合、あなたはそれがあまり解像度を有するがQElapsedTimerは、いくつかのプラットフォーム上でナノ秒を行うことができますが、QTimeは、ミリ秒と同じくらいローになり、同様の方法でQTimeを使用することができます//ドキュメント:[QTimer](http://doc.qt.io/qt-5/qtimer.html)と[QDateTime](HTTPを使用して

class ChronoUI : public QWidget { 
    Q_OBJECT 
    QTime startTime; 
    QTimer t; 
    QLabel * l; 
    QPushButton * startB, * stopB; 
    public: 
    ChronoUI() { 
     QVBoxLayout * ly = new QVBoxLayout; 
     setLayout(ly); 
     ly->addWidget(l = new QLabel(this)); 
     l->setText(QTime(0, 0).toString()); 
     ly->addWidget(startB = new QPushButton("start", this)); 
     ly->addWidget(stopB = new QPushButton("stop", this)); 
     connect(&t, SIGNAL(timeout()), this, SLOT(updateTime())); 
     connect(startB, SIGNAL(clicked(bool)), this, SLOT(start())); 
     connect(stopB, SIGNAL(clicked(bool)), &t, SLOT(stop())); 
    } 
    public slots: 
    void updateTime() { l->setText(QTime(0, 0).addMSecs(startTime.elapsed()).toString()); } 
    void start() { 
     l->setText(QTime(0, 0).toString()); 
     startTime.restart(); 
     t.start(1000); 
    } 
}; 
関連する問題