Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么我的QGraphicsWidget在';的边界框仍在视图中?_Qt_Qgraphicsview_Qgraphicsscene_Qgraphicsitem_Qgraphicswidget - Fatal编程技术网

Qt 为什么我的QGraphicsWidget在';的边界框仍在视图中?

Qt 为什么我的QGraphicsWidget在';的边界框仍在视图中?,qt,qgraphicsview,qgraphicsscene,qgraphicsitem,qgraphicswidget,Qt,Qgraphicsview,Qgraphicsscene,Qgraphicsitem,Qgraphicswidget,我有一个QGraphicsWidget,它代表地图上的一条线。当边界矩形底部的一小部分移出场景时,对象将消失。当它的边框右侧的一部分离开场景时,它也会消失。下面是正在发生的事情的说明 绿色框是从对象的绘制功能绘制的边界矩形 现在,我平移场景,以便只有这部分对象可见。它仍在考虑之中。但是,如果再向右平移,对象将消失,尽管视口中仍有一半的边界矩形 向下平移以使对象底部离开视口时也会发生同样的情况。如果我向下平移比向下平移更多,对象就会消失 以下是绘制功能: void AirwayGraphic

我有一个QGraphicsWidget,它代表地图上的一条线。当边界矩形底部的一小部分移出场景时,对象将消失。当它的边框右侧的一部分离开场景时,它也会消失。下面是正在发生的事情的说明

绿色框是从对象的绘制功能绘制的边界矩形

现在,我平移场景,以便只有这部分对象可见。它仍在考虑之中。但是,如果再向右平移,对象将消失,尽管视口中仍有一半的边界矩形

向下平移以使对象底部离开视口时也会发生同样的情况。如果我向下平移比向下平移更多,对象就会消失

以下是绘制功能:

void AirwayGraphicsWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) {


    QPen pen(m_aw_obj->AltitudeType() == stds::rdb::WPAltitudeTypes::HIGH ? COLOR_HI_AIRWAY :
    m_aw_obj->AltitudeType() == stds::rdb::WPAltitudeTypes::LOW ? COLOR_LO_AIRWAY :
    COLOR_BOTH_AIRWAY);

    pen.setWidth(3);
    pen.setCosmetic(true);
    painter->setPen(pen);
    painter->drawPolyline(m_points.data(), m_points.size());

    pen.setColor(m_is_hovered ? Qt::red : Qt::green);
    pen.setWidth(0);
    painter->setPen(pen);
    painter->drawRect(boundingRect());
}
你知道这是怎么回事吗?我已经搞了好几天了,我没有东西可以试了

更新 建造师

AirwayGraphicsWidget::AirwayGraphicsWidget(const stds::rdb::model::EnrouteAirway* aw, QGraphicsItem* parent)
: RDBEntityGraphicsWidget(aw, parent)
, m_bounding_rect()
, m_aw_obj(aw)
, m_lod(LevelOfDetail::NONE)
, m_is_hovered(false)
{

    double highest_lat = std::numeric_limits<double>::lowest();
    double lowest_lat  = std::numeric_limits<double>::max();
    double highest_lon = std::numeric_limits<double>::lowest();
    double lowest_lon  = std::numeric_limits<double>::max();

    for (auto &awd : m_aw_obj->AirwayData()) {
        if (-awd.entity->Pos().latitude_deg > highest_lat) {
            highest_lat = -awd.entity->Pos().latitude_deg;
        }

        if (-awd.entity->Pos().latitude_deg < lowest_lat) {
            lowest_lat = -awd.entity->Pos().latitude_deg;
        }

        if (awd.entity->Pos().longitude_deg > highest_lon) {
            highest_lon = awd.entity->Pos().longitude_deg;
        }

        if (awd.entity->Pos().longitude_deg < lowest_lon) {
            lowest_lon = awd.entity->Pos().longitude_deg;
        }

        m_points.push_back(QPointF(awd.entity->Pos().longitude_deg, -awd.entity->Pos().latitude_deg));
}
    highest_lat += 5.0 * geom::NM_TO_DEG;
    lowest_lat  -= 5.0 * geom::NM_TO_DEG;
    highest_lon += 5.0 * geom::NM_TO_DEG;
    lowest_lon  -= 5.0 * geom::NM_TO_DEG;
    prepareGeometryChange();
    m_bounding_rect = QRectF(QPointF(highest_lon, highest_lat), QPointF(lowest_lon, lowest_lat));

    setPreferredHeight(m_bounding_rect.height());
    setPreferredWidth(m_bounding_rect.width());

    setAcceptHoverEvents(true);
}

QRectF AirwayGraphicsWidget::boundingRect() const { return m_bounding_rect; }
AirwayGraphicsWidget::AirwayGraphicsWidget(常量stds::rdb::模型::途中航路*aw,QGraphicsItem*父项)
:RDBEntityGraphicsWidget(aw,父级)
,m_bounding_rect()
,m_aw_obj(aw)
,m_lod(详细级别::无)
,m_悬停(false)
{
双倍最高水平=标准::数值极限::最低();
双最低水平=标准::数值极限::最大();
双倍最高值=标准::数值极限::最低();
双下限=标准::数值极限::最大值();
用于(自动和全轮驱动:m_aw_obj->AirwayData()){
如果(-awd.实体->位置().纬度>最高纬度){
最高纬度=-awd.entity->Pos().纬度度;
}
如果(-awd.实体->位置().纬度度<最低纬度){
最低纬度=-awd.entity->Pos().纬度度;
}
如果(awd实体->位置().经度>最高经度){
最高经度=全轮驱动实体->位置()经度;
}
if(全轮驱动实体->位置().经度<最低经度){
最低经度=全轮驱动实体->位置()经度;
}
m_点。推回(QPointF(awd.实体->位置().经度度,-awd.实体->位置().纬度度));
}
最高纬度+=5.0*geom::纳米到度;
最低纬度-=5.0*geom::纳米至度;
最高_lon+=5.0*geom::NM_至_度;
最低_lon-=5.0*geom::NM_至_度;
准备计量变更();
m_bounding_rect=QRectF(QPointF(最高长度,最高宽度),QPointF(最低长度,最低宽度));
setPreferredHeight(m_bounding_rect.height());
setPreferredWidth(m_bounding_rect.width());
setAcceptHoverEvents(true);
}
QRectF AirwayGraphicsWidget::boundingRect()常量{return m_bounding_rect;}

show the boundingRect()方法提供一个相当多的代码来获取带有缩放平移图形视图的qt应用程序。如果您提供一个,显然我不是说您的整个项目,而是一个再现您的问题并只关注于同时完成的所需功能的最小项目,也就是说,你不缺乏任何外部的东西,能够执行它使我们的生活更容易,如果你努力,你会得到更快的反应,如果你不努力,你可能不会得到任何反应,所有的努力都有回报。