一款有意思的 Qt 飞行仪表控件

最近在网上偶然发现一款Qt飞行仪表板控件,真的很酷哦!
是一款开源软件,地址 https://sourceforge.net/projects/qfi/
不过似乎最近打不开了,
在这里也可以下载
直接编译运行:
QFI
美工还是不错的!
控件操作非常简单:

void MainWindow::timerEvent( QTimerEvent *event )
{
    /
    QMainWindow::timerEvent( event );
    /

    float timeStep = m_time.restart();

    m_realTime = m_realTime + timeStep / 1000.0f;

    float alpha     =  0.0f;
    float beta      =  0.0f;
    float roll      =  0.0f;
    float pitch     =  0.0f;
    float heading   =  0.0f;
    float slipSkid  =  0.0f;
    float turnRate  =  0.0f;
    float devH      =  0.0f;
    float devV      =  0.0f;
    float airspeed  =  0.0f;
    float altitude  =  0.0f;
    float pressure  = 28.0f;
    float climbRate =  0.0f;
    float machNo    =  0.0f;
    float adf       =  0.0f;
    float dme       =  0.0f;

    if ( m_ui->pushButtonAuto->isChecked() )
    {
        alpha     =   20.0f * sin( m_realTime /  10.0f );
        beta      =   15.0f * sin( m_realTime /  10.0f );
        roll      =  180.0f * sin( m_realTime /  10.0f );
        pitch     =   90.0f * sin( m_realTime /  20.0f );
        heading   =  360.0f * sin( m_realTime /  40.0f );
        slipSkid  =    1.0f * sin( m_realTime /  10.0f );
        turnRate  =    7.0f * sin( m_realTime /  10.0f );
        devH      =    1.0f * sin( m_realTime /  20.0f );
        devV      =    1.0f * sin( m_realTime /  20.0f );
        airspeed  =  125.0f * sin( m_realTime /  40.0f ) +  125.0f;
        altitude  = 9000.0f * sin( m_realTime /  40.0f ) + 9000.0f;
        pressure  =    2.0f * sin( m_realTime /  20.0f ) +   30.0f;
        climbRate =  650.0f * sin( m_realTime /  20.0f );
        machNo    = airspeed / 650.0f;
        adf       = -360.0f * sin( m_realTime /  50.0f );
        dme       =   99.0f * sin( m_realTime / 100.0f );

        m_ui->spinBoxAlpha ->setValue( alpha     );
        m_ui->spinBoxBeta  ->setValue( beta      );
        m_ui->spinBoxRoll  ->setValue( roll      );
        m_ui->spinBoxPitch ->setValue( pitch     );
        m_ui->spinBoxSlip  ->setValue( slipSkid  );
        m_ui->spinBoxTurn  ->setValue( turnRate  );
        m_ui->spinBoxDevH  ->setValue( devH      );
        m_ui->spinBoxDevV  ->setValue( devV      );
        m_ui->spinBoxHead  ->setValue( heading   );
        m_ui->spinBoxSpeed ->setValue( airspeed  );
        m_ui->spinBoxMach  ->setValue( machNo    );
        m_ui->spinBoxAlt   ->setValue( altitude  );
        m_ui->spinBoxPress ->setValue( pressure  );
        m_ui->spinBoxClimb ->setValue( climbRate );
        m_ui->spinBoxADF   ->setValue( adf       );
        m_ui->spinBoxDME   ->setValue( dme       );
    }
    else
    {
        alpha     = (float)m_ui->spinBoxAlpha ->value();
        beta      = (float)m_ui->spinBoxBeta  ->value();
        roll      = (float)m_ui->spinBoxRoll  ->value();
        pitch     = (float)m_ui->spinBoxPitch ->value();
        heading   = (float)m_ui->spinBoxHead  ->value();
        slipSkid  = (float)m_ui->spinBoxSlip  ->value();
        turnRate  = (float)m_ui->spinBoxTurn  ->value();
        devH      = (float)m_ui->spinBoxDevH  ->value();
        devV      = (float)m_ui->spinBoxDevV  ->value();
        airspeed  = (float)m_ui->spinBoxSpeed ->value();
        pressure  = (float)m_ui->spinBoxPress ->value();
        altitude  = (float)m_ui->spinBoxAlt   ->value();
        climbRate = (float)m_ui->spinBoxClimb ->value();
        machNo    = (float)m_ui->spinBoxMach  ->value();
        adf       = (float)m_ui->spinBoxADF   ->value();
        dme       = (float)m_ui->spinBoxDME   ->value();
    }

    m_ui->widgetPFD->setFlightPathMarker ( alpha, beta );
    m_ui->widgetPFD->setRoll          ( roll     );
    m_ui->widgetPFD->setPitch         ( pitch     );
    m_ui->widgetPFD->setSlipSkid      ( slipSkid  );
    m_ui->widgetPFD->setTurnRate      ( turnRate / 6.0f );
    m_ui->widgetPFD->setDevH          ( devH      );
    m_ui->widgetPFD->setDevV          ( devV      );
    m_ui->widgetPFD->setHeading       ( heading   );
    m_ui->widgetPFD->setAirspeed      ( airspeed  );
    m_ui->widgetPFD->setMachNo        ( machNo    );
    m_ui->widgetPFD->setAltitude      ( altitude  );
    m_ui->widgetPFD->setPressure      ( pressure  );
    m_ui->widgetPFD->setClimbRate     ( climbRate / 100.0f );

    m_ui->widgetNAV->setHeading    ( heading   );
    m_ui->widgetNAV->setHeadingBug ( 0.0f );
    m_ui->widgetNAV->setCourse     ( 0.0f );
    m_ui->widgetNAV->setBearing    ( adf  , true );
    m_ui->widgetNAV->setDeviation  ( devH , true );
    m_ui->widgetNAV->setDistance   ( dme  , true );

    m_ui->widgetSix->setRoll      ( roll      );
    m_ui->widgetSix->setPitch     ( pitch     );
    m_ui->widgetSix->setAltitude  ( altitude  );
    m_ui->widgetSix->setPressure  ( pressure  );
    m_ui->widgetSix->setAirspeed  ( airspeed  );
    m_ui->widgetSix->setHeading   ( heading   );
    m_ui->widgetSix->setSlipSkid  ( slipSkid * 15.0f );
    m_ui->widgetSix->setTurnRate  ( turnRate  );
    m_ui->widgetSix->setClimbRate ( climbRate );

    m_ui->widgetPFD->update();
    m_ui->widgetNAV->update();
    m_ui->widgetSix->update();

    m_steps++;
}

类似的工业仪表控件网上还有很多。真心感觉Qt拯救了C++!

飞行器速度表控件,主要应用于模拟飞行器的速度仪表,可用于模拟训练,仿真等软件界面。飞行器速度表控件占用资源小,执行效率高。经测试其刷新周期小于5毫秒,均值为2毫秒。本控件提供丰富的接口。 飞行器速度表控件格式为OCX。 飞行器速度表控件帮助手册 > 接口说明 基本参数 SetRealSpeed 设置实际飞行速度 GetRealSpeed 获取实际飞行速度 SetPlanSpeed 设置计划飞行速度 GetPlanSpeed 获取计划飞行速度 背景 SetBKMode 设置背景模式 GetBKMode 获取背景模式 SetBKColor 设置背景颜色 GetBKColor 获取背景颜色 SetBKPictureMode 设置背景贴图模式 GetBKPictureMode 获取背景贴图模式 SetBKFiltrateColor 设置背景图片过滤颜色 GetBKFiltrateColor 获取背景图片过滤颜色 SetBKPicutrePath 设置背景图片路径 GetBKPicutrePath 获取背景图片路径 边框 SetBorderWidth 设置边框宽度 GetBorderWidth 获取边框宽度 SetBorderColor 设置边框颜色 GetBorderColor 获取边框颜色 标尺 SetAutoCenter 设置是否为自动计算标尺中心坐标 SetCenter 设置自定义标尺中心坐标 GetCenter 获取标尺中心坐标 SetRulerDirection 设置标尺方向 GetRulerDirection 获取标尺方向 SetMaxMinValue 设置标尺的最大值和最小值 GetMaxMinValue 获取标尺的最大值和最小值 SetRulerStyle 设置标尺的样式 GetRulerStyle 获取标尺的样式 SetUnitSpeed 设置一个单元格代表的海拔高度 SetUnitPixel 设置一个单元格所占的像素数目 SetUnitGroup 设置一组包含单元格的数目 SetRulerDegreeWidth 设置标尺刻度线的宽度 AddIntervalColor 添加区间颜色 ClearIntervalColor 清空区间颜色 SetRulerFontStyle 设置标尺文字样式 标牌 SetSignOffset 设置标牌偏移量 SetSignSize 设置标牌大小 SetSignArrowSize 设置标牌箭头大小 SetSignBKColor 设置标牌背景颜色 SetSignBorderStyle 设置标牌边框样式 SetSignFontInterval 设置标牌文字偏移量 SetSignFontStyle 设置标牌文字样式 SetSignFontColor 设置标牌文字颜色 SetSignDigit 设置标牌文字有效数字个数 SetCartoon 设置标牌文字是否采用动画 SetCartoonFontStyle 设置动画字体样式 SetCartoonFontColor 设置动画字体颜色 SetAutoCartoonFontSize 设置是否采用用户自定义的字体高度 SetCartoonFontHeight 设置用户自定义的字体高度 计划飞行速度提示 SetDrawPlan 设置是否绘制计划飞行速度指示 SetPlanDrawText 设置是否绘制计划飞行速度指示文字 SetDrawPlanTrend 设置是否绘制计划飞行速度趋势线 SetPlanOffsetX 设置计划飞行速度指示X偏移量 SetPlanArrowSize 设置计划飞行速度指示箭头大小 SetPlanArrowStyle 设置计划飞行速度指示箭头样式 SetPlanBKMode 设置计划飞行速度指示箭头背景模式 SetPlanBKColor 设置计划飞行速度指示箭头背景颜色 SetPlanFontStyle 设置计划飞行速度指示文字样式 SetPlanFontColor 设置计划飞行速度指示文字颜色 SetPlanTextOffsetX 设置计划飞行速度指示文字X方向偏移量 SetPlanTrendOffsetX 设置计划飞行速度指示趋势线X方向偏移量 SetPlanTrendArrowSize 设置计划飞行速度指示趋势线箭头大小 SetPlanTrendArrowStyle 设置计划飞行速度指示趋势线箭头样式 注释文字 AddNoteInfo 添加注释文字信息 ClearNoteInfo 清空注释文字信息 SetNoteArrowSize 设置注释箭头大小 SetNoteArrowWidth 设置注释箭线宽度 SetNoteArrowStyle 设置注释箭线样式 SetNoteFontStyle 设置注释文字样式 SetNoteFontColor 设置注释文字颜色 SetNoteArrowOffsetX 设置注释箭线X方向偏移量 SetNoteTextOffsetX 设置注释文字X方向偏移量
飞行器高度表控件,主要应用于模拟飞行器的高度仪表,可用于模拟训练,仿真等软件界面。飞行器高度表控件占用资源小,执行效率高。经测试其刷新周期小于5毫秒,均值为2毫秒。本控件提供丰富的接口。 飞行器高度表控件格式为OCX。 基本参数 SetRealAltitude 设置实际飞行高度 GetRealAltitude 获取实际飞行高度 SetPlanAltitude 设置计划飞行高度 GetPlanAltitude 获取计划飞行高度 背景 SetBKMode 设置背景模式 GetBKMode 获取背景模式 SetBKColor 设置背景颜色 GetBKColor 获取背景颜色 SetBKPictureMode 设置背景贴图模式 GetBKPictureMode 获取背景贴图模式 SetBKFiltrateColor 设置背景图片过滤颜色 GetBKFiltrateColor 获取背景图片过滤颜色 SetBKPicutrePath 设置背景图片路径 GetBKPicutrePath 获取背景图片路径 边框 SetBorderWidth 设置边框宽度 GetBorderWidth 获取边框宽度 SetBorderColor 设置边框颜色 GetBorderColor 获取边框颜色 标尺 SetAutoCenter 设置是否为自动计算标尺中心坐标 SetCenter 设置自定义标尺中心坐标 GetCenter 获取标尺中心坐标 SetRulerDirection 设置标尺方向 GetRulerDirection 获取标尺方向 SetMaxMinValue 设置标尺的最大值和最小值 GetMaxMinValue 获取标尺的最大值和最小值 SetRulerStyle 设置标尺的样式 GetRulerStyle 获取标尺的样式 SetUnitAltitude 设置一个单元格代表的海拔高度 SetUnitPixel 设置一个单元格所占的像素数目 SetUnitGroup 设置一组包含单元格的数目 SetRulerDegreeWidth 设置标尺刻度线的宽度 AddIntervalColor 添加区间颜色 ClearIntervalColor 清空区间颜色 SetRulerFontStyle 设置标尺文字样式 标牌 SetSignOffset 设置标牌偏移量 SetSignSize 设置标牌大小 SetSignArrowSize 设置标牌箭头大小 SetSignBKColor 设置标牌背景颜色 SetSignBorderStyle 设置标牌边框样式 SetSignFontInterval 设置标牌文字偏移量 SetSignFontStyle 设置标牌文字样式 SetSignFontColor 设置标牌文字颜色 SetSignDigit 设置标牌文字有效数字个数 SetCartoon 设置标牌文字是否采用动画 SetCartoonFontStyle 设置动画字体样式 SetCartoonFontColor 设置动画字体颜色 SetAutoCartoonFontSize 设置是否采用用户自定义的字体高度 SetCartoonFontHeight 设置用户自定义的字体高度 计划飞行高度提示 SetDrawPlan 设置是否绘制计划飞行高度指示 SetPlanDrawText 设置是否绘制计划飞行高度指示文字 SetDrawPlanTrend 设置是否绘制计划飞行高度趋势线 SetPlanOffsetX 设置计划飞行高度指示X偏移量 SetPlanArrowSize 设置计划飞行高度指示箭头大小 SetPlanArrowStyle 设置计划飞行高度指示箭头样式 SetPlanBKMode 设置计划飞行高度指示箭头背景模式 SetPlanBKColor 设置计划飞行高度指示箭头背景颜色 SetPlanFontStyle 设置计划飞行高度指示文字样式 SetPlanFontColor 设置计划飞行高度指示文字颜色 SetPlanTextOffsetX 设置计划飞行高度指示文字X方向偏移量 SetPlanTrendOffsetX 设置计划飞行高度指示趋势线X方向偏移量 SetPlanTrendArrowSize 设置计划飞行高度指示趋势线箭头大小 SetPlanTrendArrowStyle 设置计划飞行高度指示趋势线箭头样式 注释文字 AddNoteInfo 添加注释文字信息 ClearNoteInfo 清空注释文字信息 SetNoteArrowSize 设置注释箭头大小 SetNoteArrowWidth 设置注释箭线宽度 SetNoteArrowStyle 设置注释箭线样式 SetNoteFontStyle 设置注释文字样式 SetNoteFontColor 设置注释文字颜色 SetNoteArrowOffsetX 设置注释箭线X方向偏移量 SetNoteTextOffsetX 设置注释文字X方向偏移量
很高兴为您提供帮助!以下是一个简单的基于QT仪表控件实现: class Dashboard : public QWidget { Q_OBJECT public: Dashboard(QWidget *parent = nullptr); void setRange(qreal min, qreal max); void setValue(qreal value); protected: void paintEvent(QPaintEvent *); private: qreal m_min; qreal m_max; qreal m_value; }; void Dashboard::setRange(qreal min, qreal max) { m_min = min; m_max = max; } void Dashboard::setValue(qreal value) { m_value = value; } void Dashboard::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); // 绘制背景 painter.fillRect(rect(), Qt::white); // 计算当前值在范围内的比例 qreal ratio = (m_value - m_min) / (m_max - m_min); // 绘制进度条 painter.setBrush(Qt::green); painter.setPen(Qt::NoPen); painter.drawPie(rect(), 225*16, (ratio*270)*16); // 绘制刻度线 painter.setBrush(Qt::black); painter.setPen(Qt::NoPen); qreal tickCount = (m_max - m_min) / 10.0; qreal angleStep = 270 / tickCount; for (int i = 0; i <= tickCount; ++i) { qreal angle = i * angleStep; qreal x1 = 0.4 * rect().width() / 2 * qCos(qDegreesToRadians(angle + 45)); qreal y1 = 0.4 * rect().width() / 2 * qSin(qDegreesToRadians(angle + 45)); qreal x2 = 0.45 * rect().width() / 2 * qCos(qDegreesToRadians(angle + 45)); qreal y2 = 0.45 * rect().width() / 2 * qSin(qDegreesToRadians(angle + 45)); painter.drawLine(width() / 2 + x1, height() / 2 + y1, width() / 2 + x2, height() / 2 + y2); } // 绘制文字 painter.setBrush(Qt::black); painter.setPen(Qt::NoPen); QFont font("Helvetica", 12, QFont::Bold); painter.setFont(font); painter.drawText(rect(), Qt::AlignCenter, QString::number(m_value)); } // 使用方法示例: // Dashboard *dashboard = new Dashboard(); // dashboard->setRange(0, 100); // dashboard->setValue(50); // dashboard->show(); 希望对您有所帮助!
评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁劲犇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值