-1
QTでクロノメーターを作るのに苦労することはほとんどありません。ボタンを1つ押してから「HH:MM:SS」と表示されているQLabelで行う必要があります。それを行う簡単な方法がありますか?どうもありがとうございました!Qt/C++でクロノメーターを作成するには
QTでクロノメーターを作るのに苦労することはほとんどありません。ボタンを1つ押してから「HH:MM:SS」と表示されているQLabelで行う必要があります。それを行う簡単な方法がありますか?どうもありがとうございました!Qt/C++でクロノメーターを作成するには
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);
}
};
:あなたが望む最低秒であれば、やり過ぎの両方.qt.io/qt-5/qdatetime.html) –
ボタンはタイマーを開始し、毎秒タイマーをトリガーし、毎秒QTimeに秒を追加します。QTime :: toString、QLabel :: setText – user3528438
@ user3528438 - これはあまり正確ではありませんが、毎秒数ミリ秒の時間がかかります。 – dtech