資源簡介
使用Qt繪制雷達表盤,并可以顯示目標、余暉、同心圓、十字架等元素。

代碼片段和文件信息
#include?“SkyplotWidget.h“
#include?
#include?
#include?
#include?
#include?
#include?
SkyplotWidget::SkyplotWidget(QWidget?*parent)
????:?QWidget(parent)
?????flash(?false?)
?????p_marginScale(?0.78?)
?????p_satScale(?0.03?)
?????p_fontScale(?0.02?)
?????p_gridColor(?QColor(?150?150?150?255?)?)
?????p_gridTextColor(?QColor(?210?210210))
?????p_gridWidth(?3?)
?????p_ellipses(?3?)
?????p_crosses(?3?)
?????p_textMargin(?10?)
?????p_flashIntervall(?500?)
?????p_withGridLabels(?true?)
?????p_antialiased(?true?)
?????m_pieRotate(0)
{
????flashTimer.setInterval(?p_flashIntervall?);
????connect(?&flashTimer?SIGNAL(?timeout()?)?this?SLOT(?change_flash()?)?);
????flashTimer.start(?p_flashIntervall?);
????connect(&m_PieSpeedSIGNAL(timeout())thisSLOT(pie_speed()));
????m_PieSpeed.start(50);
}
void?SkyplotWidget::change_flash(?void?)
{
????flash?=?!flash;
????this->update();
}
void?SkyplotWidget::pie_speed(?void?)
{
????m_pieRotate?-=?10;
????this->update();
}
void?SkyplotWidget::paintEvent(QPaintEvent?*)
{
????QSize??????????widgetSize(this->size());
????QPalette???????p?=?palette();
????QPainter??????*painter?=?new?QPainter(this);
????float??????????topMargin?;
????float??????????leftMargin;
????float??????????size;
????float??????????satelliteSize;
????float??????????fontSize;
????float??????????availableWidth????=?widgetSize.width?();
????float??????????availableHeight???=?widgetSize.height();
????if(?availableHeight?>?availableWidth?)
????{
????????size?=?widgetSize.width()?*?p_marginScale;
????????topMargin???=?(?widgetSize.width()?-?widgetSize.width()?*?p_marginScale?+?widgetSize.height()?-?widgetSize.width()?)?/?2.0;
????????leftMargin??=?(?widgetSize.width()?-?widgetSize.width()?*?p_marginScale?)?/?2.0;
????}
????else
????{
????????size?=?widgetSize.height()?*?p_marginScale;
????????leftMargin?=?(?widgetSize.height()?-?widgetSize.height()?*?p_marginScale?+?widgetSize.width()?-?widgetSize.height())?/?2.0;
????????topMargin??=?(?widgetSize.height()?-?widgetSize.height()?*?p_marginScale?)?/?2.0;
????}
????satelliteSize?=?size?*?p_satScale;
????painter->setRenderHint(QPainter::Antialiasing?p_antialiased);
????painter->translate(?leftMargin?topMargin?);??//重新設置坐標原點
????fontSize?=?size?*?p_fontScale;
????painter->setFont(QFont(?“Arial“?static_cast(fontSize)));
????//圓圈
????for(int?i=0;?i?<=?p_ellipses;?i++)
????{
????????float?radius?=?size?/?2.0?-?i?*?(?size?/?(?2.0??*?p_ellipses?));
????????painter->setPen(?QPen(?p_gridColor?p_gridWidth?)?);
????????painter->drawEllipse(QPoint(?size/2.0?size/2.0?)?static_cast(?radius?)?static_cast(radius));
????????if(p_withGridLabels)
????????{
????????????painter->setPen(?QPen(?p_gridTextColor?p_gridWidth?-2.5?)?);
????????????double?tmp?=?((p_ellipses?-?i)?*?(mMonitorScope?/?p_ellipses));
????????????QString?distance?=?QString::number(((p_ellipses?-?i)?*?(mMonitorScope?/?p_ellipses))?10??2);
??????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????14453??2019-02-27?14:09??SkyplotWidget.cpp
?????文件????????8037??2019-01-19?11:06??SkyplotWidget.h
- 上一篇:Qt天氣預報程序
- 下一篇:Qt5主窗體:文本編輯器
評論
共有 條評論