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

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

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

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

こんにちは。川上です。

時分秒の時計針画像を、表示してみました。

あら?。表示位置と回転表示状態が、デジタル時間とイッチしてないゾヨ?

以下NGしてたコードです。
ーー mainwindow.cpp ーー

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

void MainWindow::drawPaintClockVHMS(QPainter *painter)
{
    double pi = 3.141592653589793;

    // 現在の日時を取得
    QDateTime dt = QDateTime::currentDateTime();

    int hh = dt.time().hour() >= 12 ? dt.time().hour() -12:dt.time().hour() ;
    int mini = dt.time().minute();
    int msec = dt.time().second();

    qreal CIRCLE_RADIUS = 360;
    qreal f_HH = (hh*60+mini) *  (CIRCLE_RADIUS / (12*60));
    qreal f_min =  mini * CIRCLE_RADIUS / 60 + 45;
    qreal f_sec =  msec  * CIRCLE_RADIUS / 60 + 90;

    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 - 20;


    QRect base_rect((sz.width() - bsWorH) / 2  ,
                    (sz.height() - bsWorH) / 2 ,
                    bsWorH, bsWorH);


     vector<QImage> hmsimgs  = {s_HariImage,l_HariImage,byo_HariImage};
     qreal hmss[] = {f_HH,f_min,f_sec};
     for (unsigned long i=0; i < hmsimgs.size(); i++) {

         //-- Imageのリサイズ
         QImage qimg = hmsimgs[i].scaled(
                             bsWorH,
                             bsWorH,
                             Qt::KeepAspectRatio,
                             Qt::FastTransformation
                     );

         QPixmap destpix =  QPixmap::fromImage(qimg);

         painter->translate(destpix.size().width()/2,destpix.size().height()/2);
         painter->rotate(hmss[i]);
         painter->translate(-destpix.size().width()/2,-destpix.size().height()/2);

         QRect d_rect1(0,
                      0,
                      destpix.size().width(),destpix.size().height());

         painter->drawPixmap(d_rect1, destpix);

     }
}

で、どうも、変みたいでしたw。

つ・づ・く。。。

    上に戻る