Qtで作ってみた・・アナログ時計 ドツボ編_2 時・分・秒画像の回転(QPainter編)
こんにちは。川上です。
時分秒画像の回転表示に、シッカリドボってました。
巷の葦浮島に、あちこち探訪して覗き参観すると、どうやら、時分秒画像の回転方法には、QPainterなる物を使うのが良いような。。。?
で、Windowの描画更新タイミングは、
void MainWindow::paintEvent(QPaintEvent *event)
に、引っ掛ける模様。。。
paintEvent()内で、QPainterは、
・this(←MainWindow自体)で、画像や文字列の描画の更新をする
みたいので、描画してみると。。
ーー 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 | 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); } |
なんとなく、良い感じだったけど、
時分秒画像を表示すると、・・・なんか変でした。
つ・づ・く・・