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

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

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

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

こんにちは、川上です。

アナログ時計用Prjで、底面画像や数文字の表示までは、スンナリできましたが、 時・分・秒画像の回転処理で嵌れました。(;;)

巷により、貼り付けたQGraphicsViewでの処理方法を色々尋ねながら、試行しました。
取り敢えず、決めつけで、0、90°、180°で時分秒画像を回転してみました。

void MainWindow::drawClockView()
{
    double pi = 3.141592653589793;

    // -- 時分秒の角度 「00:15:30」
    qreal CIRCLE_RADIUS = 360;
    qreal f_Hour = 0 * CIRCLE_RADIUS / 12; 
    qreal f_min =  15 * CIRCLE_RADIUS /60 ;
    qreal f_sec =  30  * CIRCLE_RADIUS /60;
	 // -- ラジアン
     qreal r_hh = f_Hour * pi / 180.0;
     qreal r_min =  f_min * pi / 180.0;
     qreal r_sec =  f_sec * pi / 180.0;
     qDebug("r_hh=%f,r_min=%f,r_sec=%f",r_hh,r_min,r_sec);

     //graphicsViewにScene_を設定。
     ui->graphicsView->setScene(&Scene_);
     //Scene_をクリア
     Scene_.clear();

     //- graphicsViewサイズ
     QSize sz = ui->graphicsView->frameSize();
     // -- Imageの縦横サイズ
     int bsWorH =  (sz.width() > sz.height() ? sz.height() : sz.width() - 40);
     // --- 時計版文字位置用の半径Size
     int hankei = bsWorH / 2 - 20;
     // MARK: -- 時計盤の数文字表示
     drawClockBoardMoji( hankei);

     vector<QImage> hmsimgs  = {baseImage, s_HariImage,l_HariImage,byo_HariImage};
     qreal r_hmss[] = {0,r_hh,r_min,r_sec};
     for (unsigned long i=0; i < hmsimgs.size(); i++) {

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

         QPixmap pixmap;
         if (i > 0) {
             const auto rect = qimg.rect();
             const auto center = rect.center();

             QTransform transform = QTransform().translate(center.x(),center.y()).rotateRadians(r_hmss[i]).scale(1,1);
             QImage rotatedImg = qimg.transformed(transform,Qt::SmoothTransformation);
             pixmap=QPixmap::fromImage(rotatedImg);

         }
         else {
             pixmap=QPixmap::fromImage(qimg);

         }


         //Scene_に画像を登録
         Scene_.addPixmap(pixmap);
     }
}

「00:15:30」(90°の倍数)の回転テストは、ここまでは、OKだったんですが。。。

「01:25:40」(任意の回転角度)で試行してみると。。。


Wa??、あれ?、うそ?、なんで? ???・・・・

で、この辺りから、ぬかるみロードのドツボがハマって行くのでした。。。。
ではでは。。

    前の記事 :
    上に戻る