Qtで作ってみた・・アナログ時計 ドツボ編_3 時・分・秒画像の回転(QPainter編)
こんにちは。川上です。
時分秒の時計針画像を、表示してみました。
あら?。表示位置と回転表示状態が、デジタル時間とイッチしてないゾヨ?
以下NGしてたコードです。
ーー mainwindow.cpp ーー
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 60 61 62 63 64 65 66 67 68 | 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。
つ・づ・く。。。