Qtで作ってみた・・アナログ時計 ドツボ編-1 時・分・秒画像の回転(QGraphicsView編)
こんにちは、川上です。
アナログ時計用Prjで、底面画像や数文字の表示までは、スンナリできましたが、 時・分・秒画像の回転処理で嵌れました。(;;)
巷により、貼り付けたQGraphicsViewでの処理方法を色々尋ねながら、試行しました。
取り敢えず、決めつけで、0、90°、180°で時分秒画像を回転してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 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」(任意の回転角度)で試行してみると。。。
で、この辺りから、ぬかるみロードのドツボがハマって行くのでした。。。。
ではでは。。