Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) QtLabeledQuadBezierArrowItem

 

QtQt CreatorLubuntu

 

QtArrowItem is a Qt QGraphicsItem class that displays a curved arrow.

Technical facts

 

 

 

 

 

 

./CppQtLabeledQuadBezierArrowItem/CppQtLabeledQuadBezierArrowItem.pri

 

INCLUDEPATH += \
    ../../Classes/CppQtLabeledQuadBezierArrowItem

SOURCES += \
    ../../Classes/CppQtLabeledQuadBezierArrowItem/qtlabeledquadbezierarrowitem.cpp

HEADERS  += \
    ../../Classes/CppQtLabeledQuadBezierArrowItem/qtlabeledquadbezierarrowitem.h

OTHER_FILES += \
    ../../Classes/CppQtLabeledQuadBezierArrowItem/Licence.txt

 

 

 

 

 

./CppQtLabeledQuadBezierArrowItem/qtlabeledquadbezierarrowitem.h

 

#ifndef QTLABELEDQUADBEZIERARROWITEM_H
#define QTLABELEDQUADBEZIERARROWITEM_H

#include <string>

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <boost/signals2.hpp>
#include "qtroundededitrectitem.h"
#pragma GCC diagnostic pop

namespace ribi {

struct QtQuadBezierArrowItem;

///The QtLabeledQuadBezierArrowItem is a QtRoundedEditRectItem that
///draws a bezier curve underneath itself, between head and tail arrowhead
struct QtLabeledQuadBezierArrowItem : public QtRoundedEditRectItem
{

  QtLabeledQuadBezierArrowItem(
    QGraphicsItem *const from,
    const bool tail,
    const std::string& text,
    const bool head,
    QGraphicsItem *const to,
    QGraphicsItem *parent = 0
  );
  QtLabeledQuadBezierArrowItem(const QtLabeledQuadBezierArrowItem&) = delete;
  QtLabeledQuadBezierArrowItem& operator=(const QtLabeledQuadBezierArrowItem&) = delete;
  ~QtLabeledQuadBezierArrowItem() noexcept {}

        boost::shared_ptr<const QtQuadBezierArrowItem>  GetArrow() const noexcept { return m_arrow; }
  const boost::shared_ptr<      QtQuadBezierArrowItem>& GetArrow()       noexcept { return m_arrow; }

  ///Obtain the version of this class
  static std::string GetVersion() noexcept;

  ///Obtain the version history of this class
  static std::vector<std::string> GetVersionHistory() noexcept;

protected:
  virtual QRectF boundingRect() const noexcept override final;
  virtual void keyPressEvent(QKeyEvent *event) noexcept override final;
  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) noexcept override final;

private:
  const boost::shared_ptr<QtQuadBezierArrowItem> m_arrow;

};

} //~namespace ribi

#endif // QTLABELEDQUADBEZIERARROWITEM_H

 

 

 

 

 

./CppQtLabeledQuadBezierArrowItem/qtlabeledquadbezierarrowitem.cpp

 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include "qtlabeledquadbezierarrowitem.h"

#include <cassert>
#include <sstream>
#include <QBrush>
#include <QFont>
#include <QGraphicsScene>
#include <QKeyEvent>

#include <QInputDialog>
#include <QPainter>

#include "qtquadbezierarrowitem.h"
#include "trace.h"

#pragma GCC diagnostic pop

ribi::QtLabeledQuadBezierArrowItem::QtLabeledQuadBezierArrowItem(
    QGraphicsItem *const from,
    const bool tail,
    const std::string& text,
    const bool head,
    QGraphicsItem *const to,
    QGraphicsItem *parent)
  : QtRoundedEditRectItem( {text} ,QtRoundedEditRectItem::Padding(),QFont("monospace",9),parent),
    m_arrow(new QtQuadBezierArrowItem(from,tail,this,head,to))
{
  assert(from);
  assert(to);
  assert(m_arrow);
  this->setFlags(
      QGraphicsItem::ItemIsFocusable
    | QGraphicsItem::ItemIsMovable
    | QGraphicsItem::ItemIsSelectable);
  this->SetCenterPos(
    (from->pos().x() + to->pos().x()) * 0.49,
    (from->pos().y() + to->pos().y()) * 0.49
  );
  assert(m_arrow->GetMidItem());
  assert(m_arrow->GetMidItem()->pos() == this->GetCenterPos());
  assert(m_arrow->GetFromItem()->pos() == from->pos());
  assert(m_arrow->GetToItem()->pos() == to->pos());
}

QRectF ribi::QtLabeledQuadBezierArrowItem::boundingRect() const noexcept
{
  return QtRoundedEditRectItem::boundingRect()
    .united(m_arrow->boundingRect().translated(-this->GetCenterPos()));
}

std::string ribi::QtLabeledQuadBezierArrowItem::GetVersion() noexcept
{
  return "1.0";
}

std::vector<std::string> ribi::QtLabeledQuadBezierArrowItem::GetVersionHistory() noexcept
{
  return {
    "2013-01-01: version 1.0: initial version"
  };
}

void ribi::QtLabeledQuadBezierArrowItem::keyPressEvent(QKeyEvent *event) noexcept
{
  QtRoundedEditRectItem::keyPressEvent(event);
  m_arrow->keyPressEvent(event);
}

void ribi::QtLabeledQuadBezierArrowItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) noexcept
{
  assert(m_arrow->GetMidItem());
  assert(this->GetCenterPos() == m_arrow->GetMidItem()->pos());
  painter->translate(-this->GetCenterPos());
  m_arrow->paint(painter,option,widget);
  painter->translate(this->GetCenterPos());
  QtRoundedEditRectItem::paint(painter,option,widget);
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml