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

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

Qtで作ってみた・・アナログ時計 其の3 数文字の表示(QGraphicsView編)

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

こんにちは。川上です。

アナログ時計の背景画に、1.2.3・・・の数文字の表示です。

ーー mainwindow.cpp ーー

void MainWindow::drawClockBoardMoji(int hankei)
{
    double pi = 3.14;
    int lblwh= 20;

    QSize sz = ui->graphicsView->frameSize();
    QPointF bs_center = QPointF(sz.width() / 2 - (lblwh+lblwh/2) , sz.height()/2 - (lblwh+lblwh/2));

     for (int ps=1;ps<=12;ps++) {
        QLabel* label = new QLabel(QString::number(ps));

        label->setStyleSheet("background:white; color:green;");
        label->setAlignment(Qt::AlignCenter);

		//=== 数文字の表示位置の角度の取得
        double qq =  pi / double(180) * double(getKakuDo(ps) - 90 );
        double x = double(hankei) * cos(qq);
        double y = double(hankei) * sin(qq);
		
        float lbl_x = float(bs_center.rx()) + float(x);
        float lbl_y = float(bs_center.ry()) + float(y);
		
        label->setGeometry(lbl_x,lbl_y, lblwh, lblwh);
        Scene_.addWidget(label);
    }
}
float  MainWindow::getKakuDo(int idx)
 {
       int CIRCLE_RADIUS = 360;
       float angleUnit  = CIRCLE_RADIUS / 12;
       return float(idx) * angleUnit;
 }

drawClockBoardMoji()をdrawClockView_base()に組み込みました。

void MainWindow::drawClockView_base()
{
	QSize sz = ui->graphicsView->frameSize();
	// -- Imageの縦横サイズ
	int bsWorH =  (sz.width() > sz.height() ? sz.height() : sz.width() - 40);
	
	//---graphicsViewにScene_を設定。
	ui->graphicsView->setScene(&Scene_);
	
	// --- 時計版文字位置用の半径Size
	int hankei = bsWorH / 2 - 20;
	// MARK: -- 時計盤の数文字表示
	drawClockBoardMoji( hankei);

   ・・・・
}

でした。。。

ではでは。

    次の記事 :
    上に戻る