QChartマウスは、曲線に曲線(DLLにパッケージング)// Qtooltipの表示位置を移動します

仕事への準備ができて1、

の公式Qtのチャートから取られたパッケージの事例。

公式列子を探します

インストールqtの例の場合、パスは次のとおりです。

例がインストールされていない場合は、公式サイトを参照してください。https://doc.qt.io/qt-5/qtcharts-callout-example.html

2、スタートコードが有効なパッケージです

ここでは、ソースコード、テストを自分で勉強しない、以下のすべてのコードを配置

た.cppで

//.cpp
取得//仮想関数領域サイズ
QRectF QCallout :: boundingRect()constは
{
    QPointFアンカー= mapFromParent(m_chart-> mapToPosition(m_anchorを));
    QRectF RECT;
    rect.setLeft(Qminを(m_rect.left()、アンカー.X()));
    rect.setRight(Qmaxと(m_rect.right()、anchor.x()));
    rect.setTop(Qminを(m_rect.top()、anchor.y()));
    rect.setBottom (QMAX(m_rect.bottom()、anchor.y ()))。

    RECTリターン;
}
//再描画
ボイドQCalloutを::ペイント(ペインタQPainterのを*、CONST *オプションQStyleOptionGraphicsItem、QWidgetの*ウィジェット)
{
    Q_UNUSED(オプション)
        Q_UNUSED(ウィジェット)
        QPainterPath経路;
    path.addRoundedRect(m_rect ,. 5 ,. 5)。 //角の丸い四角形のパスを追加します。

    QPointFアンカー= mapFromParent(m_chart-> mapToPosition (m_anchor)); // 。戻る図の列の相対位置
    IF {(m_rect.contains(アンカー)!)
        QPointFにPoint1、ポイント2。

        // m_rectに関連してアンカーポイントの位置を確立
        = anchor.y上方BOOL()<= m_rect.top()。
        BOOL aboveCenter = anchor.y()> m_rect.top()&& anchor.y()<= m_rect.center()は、y()。
        BOOL belowCenter = anchor.y()> m_rect.center()は、y()&& anchor.y()<= m_rect.bottom()。
        = anchor.y()> m_rect.bottom以下BOOL()。

        BOOL onLeft = anchor.x()<= m_rect.left()。
        BOOL leftOfCenter = anchor.x()> m_rect.left()&& anchor.x()<= m_rect.center()X()。
        BOOL rightOfCenter = anchor.x()> m_rect.center()X()&& anchor.x()<= m_rect.right()。
        BOOL onRight = anchor.x()> m_rect.right();

        //最寄りm_rectコーナーを取得します。
        QREAL X =(onRight + rightOfCenter)* m_rect.width()。
        =(+ belowCenter以下)QREAL Y * m_rect.height()。
        BOOL cornerCase =(&& onLeft上記)|| (&& onRight上記)|| (&& onLeft以下)|| (&& onRight以下)。
        BOOL垂直=のqAbs(anchor.x() - X)> qAbs(anchor.y() - Y);

        !QREAL X1 = X + leftOfCenter * 10 - rightOfCenter * 20 + cornerCase *縦*(onLeft * 10 - onRight * 20)。
        QREAL Y1 = Y + aboveCenter * 10 - belowCenter * 20 + cornerCase *縦*(10 *上-下* 20);;
        point1.setX(X1);
        point1.setY(Y1)。

        QREAL X2 = X + leftOfCenter * 20 - rightOfCenter * 10 + cornerCase *縦*!(onLeft * 20 - onRight * 10);;
        QREAL Y2 = Y + aboveCenter * 20 - belowCenter * 10 + cornerCase *縦*(20 *上-下* 10);;
        point2.setX(×2)。
        point2.setY(Y2)。

        path.moveTo(POINT1)。
        path.lineTo(アンカー);
        path.lineTo(ポイント2)。
        パス= path.simplified()。
    }
    painter-> setBrush(rectColor)。
    painter-> drawPath(パス)。
    painter-> setPen(の、textColor)。
    painter->のsetFont(m_font)。
    painter->のDrawText(m_textRect、m_text)。

    // qDebug()<< "ペイントに入った";
}
ボイド:: QCalloutのsetText(QStringのテキスト)
{
    m_text =テキスト;
    QFontMetricsメトリック(m_font); //取得テキストブロードバンド
    m_font.setPointSize(15);
    m_textRect = metrics.boundingRect(QRect(0、0、 150、150)、Qtの:: AlignLeft、m_text); //は、 境界矩形を返します。
    m_textRect.translate(5、5); //移動距離
    prepareGeometryChange();
    m_rect m_textRect.adjusted =(-5、-5 ,. 5 ,. 5); //座標系既存のに加え座標。

}
//セットクリックポイント
ボイドQCallout :: setAnchor(QPointFポイント)
{
    m_anchor =ポイント;
}
描画//更新
空隙QCallout :: updateGeometry()
{
    prepareGeometryChangeを();
    SetPos(m_chart-> mapToPosition(m_anchor)+のQPoint(10 、-50));
}
//設定された色
ボイドQCallout setRectColor ::(QColor C1、C2 QColor、INT NUM)
{
    の、textColor = C1;
    rectColor = C2;
    のfontSize = NUM;
}

コールについて:

書き込みは容易ではない、任意のヘルプならば、私は次のようにポイントを願って、ここで、いくつかのリソースは、接続しています 

ます。https://pan.baidu.com/s/1Y8mlC7razHEZpx0QEDx-WA抽出コード:02ubネットワークディスクリンクBaiduの

CSDNリンク://download.csdn.net/download/a1ngel/12115648

发布了7 篇原创文章 · 获赞 4 · 访问量 326

おすすめ

転載: blog.csdn.net/a1ngel/article/details/104049848