Qtで digital clock

Qtは C++のための cross platform frameworkです 非常に良さそうなのですが、何しろ MFCに比較すると情報がとても少ないのです

ただ豊富な sample programがついているのでそれを見ながら色々と試してみました

そのプログラムの中でデジタル・クロックというのがありました それを自分で納得できるように改変したのです

まずは digitalclock.hです

#ifndef DIGITALCLOCK_H
#define DIGITALCLOCK_H


#include <QtWidgets>
#include <QtGui>

class DigitalClock : public QWidget
{
    Q_OBJECT

public:
    DigitalClock(QWidget *parent = 0);
    QLCDNumber *lcd;
    QLabel *lbl;
    QVBoxLayout *lout;
    QFont qf;
private slots:
    void showTime();
};

#endif

そして digitalclock.cppです

#include "digitalclock.h"

DigitalClock::DigitalClock(QWidget *parent) : QWidget(parent)
{
    QPalette pal;
    pal.setColor(QPalette::Window, Qt::green);
    this->setPalette(Qt::yellow);
    this->resize(1000, 500);
    pal.setColor(QPalette::WindowText, Qt::red);

    lcd = new QLCDNumber(this);
    lcd->setSegmentStyle(QLCDNumber::Outline);
    lcd->setDigitCount(11);
    lcd->setPalette(Qt::green);


    lcd->setWindowTitle(tr("Digital Clock"));

    lcd->resize(850, 200);
    lbl = new QLabel();
    lout = new QVBoxLayout(this);
    lbl->setFont(QFont("Arial", 72, QFont::Bold));


    lbl->setPalette(pal);
    lout->addWidget(lbl);
    showTime();
}

void DigitalClock::showTime()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm ss-zzz");

    if (time.second() % 2 == 0){
       text[2] = ' ';
       text[5] = ':';
    }
    lcd->display(text.left(11));
    lbl->setText(text.left(11));
//    lbl->show();
    lbl->show();
}

そして main.cppです

#include <QApplication>
#include <QtWidgets>
#include <QtGui>

#include "digitalclock.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTimer timer;
    DigitalClock *clock = new DigitalClock();
    QObject::connect(&timer, SIGNAL(timeout()), clock, SLOT(showTime()));
    timer.start(10);

    clock->show();
    return app.exec();
}

これで結果は以下のような digital clockとなります

Digital Clock

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です