大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Qtで作ってみた・・アナログ時計 ドツボ編_2  時・分・秒画像の回転(QPainter編)

著者:川上洋
公開日:2020/03/19
最終更新日:2020/03/19
カテゴリー:技術情報 雑記

こんにちは。川上です。

時分秒画像の回転表示に、シッカリドボってました。
巷の葦浮島に、あちこち探訪して覗き参観すると、どうやら、時分秒画像の回転方法には、QPainterなる物を使うのが良いような。。。?

で、Windowの描画更新タイミングは、
void MainWindow::paintEvent(QPaintEvent *event)
に、引っ掛ける模様。。。

paintEvent()内で、QPainterは、
this(←MainWindow自体)で、画像や文字列の描画の更新をする
みたいので、描画してみると。。

ーー mainwindow.cpp ーー

void MainWindow::paintEvent(QPaintEvent *event)
{
	QPainter painter(this);
	
	// -- 背景画像の表示
	drawPaintClock(&painter);
}

void MainWindow::drawPaintClock(QPainter *painter)
{
     QSize sz = this->frameSize();
     // -- Imageの縦横サイズ
     int bsWorH =  (sz.width() > sz.height() ? sz.height() : sz.width() - 40);
     // -- センター位置の画像表示
     QRect rect((sz.width() - bsWorH) / 2 - 10 ,
                (sz.height() - bsWorH) / 2 - 10,
                bsWorH, bsWorH);
     // --- 時計版文字位置用の半径Size
     int hankei = bsWorH / 2 - 40; // 20

     QPixmap pic =  QPixmap::fromImage(baseImage);
     painter->drawPixmap(rect, pic);

     // --- 時計版文字位置用の半径Size
     // MARK: -- 時計盤の数文字表示
     drawPaintMoji(painter, hankei);

     // -- デジタル時計
     int lblwh= 20;
     QDateTime dt = QDateTime::currentDateTime();
     QString timestr;
     timestr.sprintf("%02d:%02d:%02d",dt.time().hour(),dt.time().minute(),dt.time().second());

     // -- センター位置の画像表示

     QRect tim_rect((sz.width() - bsWorH) / 2 - 10 ,
                   (sz.height() - bsWorH) /2 + bsWorH ,
                     bsWorH, bsWorH);

     painter->setPen(Qt::blue);
     painter->setFont(QFont("メイリオ", lblwh));
     painter->drawText(tim_rect, (Qt::AlignHCenter),timestr);
}

なんとなく、良い感じだったけど、

時分秒画像を表示すると、・・・なんか変でした。

つ・づ・く・・

    上に戻る