仕事への準備ができて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