Russian Qt Forum
Май 04, 2024, 04:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsObject  (Прочитано 2006 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Август 27, 2014, 10:22 »

Подскажите
создаю объект
от класса КМТ

Код
C++ (Qt)
class Text: public QGraphicsObject
{
   Q_OBJECT
 
public:
   explicit Text(int w, int h, QString str, QGraphicsObject*parent = 0);
   virtual ~Text();
   QPoint calculatePosition(int , int);
   QRectF boundingRect() const;
   QPainterPath shape() const;
   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
 
private:
   int boundingWidth;
   int boundingHeight;
 
   QGraphicsSimpleTextItem*text;
};
 
Text::Text(int w, int h, QString str, QGraphicsObject *parent)
   : QGraphicsObject()
{
   qDebug()<<"TEXT";
 
   boundingWidth = w;
   boundingHeight = h;
 
   text = new QGraphicsSimpleTextItem(this);
 
   QFont font;
   int size = textFont;
   font.setPixelSize(size);
   text->setFont(font);
 
   QFontMetrics fontmetrics(font);
   int width = fontmetrics.width(str);
   int height = fontmetrics.height();
 
   while((size > 0) && ((w < width) || (h < height)))
   {
       size--;
       font.setPixelSize(size);
       QFontMetrics fontmetrics(font);
       width = fontmetrics.width(str);
       height = fontmetrics.height();
   }
 
   QPoint pos = calculatePosition(width,height);
 
   text->setFont(font);
   text->setText(str);
   text->setPos(pos.x(),pos.y());
}
 
Text::~Text()
{
}
 
QPoint Text::calculatePosition(int textWidth, int textHeight)
{
   int tmp;
   QPoint pos;
 
   tmp = boundingWidth - textWidth;
   if(tmp >= 0)
   {
       pos.setX(tmp/2);
   }
 
   tmp = boundingHeight - textHeight;
   if(tmp >= 0)
   {
       pos.setY(tmp/2);
   }
   return pos;
}
 
QRectF Text::boundingRect() const
{
   return QRectF(0,0,boundingWidth,boundingHeight);
}
 
QPainterPath Text::shape() const
{
   QPainterPath path;
   QPolygon polygon;
   polygon << QPoint(0 ,0)
           << QPoint(boundingWidth,0)
           << QPoint(boundingWidth,boundingHeight)
           << QPoint(0,boundingHeight)
           << QPoint(0,0);
 
   path.addPolygon(polygon);
   return path;
}
 
void Text::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
   QPen pen(QBrush(Qt::black),1,Qt::SolidLine);
   painter->setBrush(Qt::white);
   painter->setPen(pen);
   painter->drawPath(shape());
}
 
 
class KMT: public QGraphicsObject
{
   Q_OBJECT
 
public:
   explicit KMT(float indata, int range,QGraphicsItem *parent = 0);
   virtual ~KMT();
   QRectF boundingRect() const;
   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
   QPainterPath shape() const;
 
private:
  Text *numberRange;
  int boundingWidth;
  int boundingHeight;
};
 
KMT::KMT(float indata,int range, QGraphicsItem *parent):
   QGraphicsObject()
{
   qDebug()<<"Create KMT";
 
   qDebug()<<"WIDTH * l_range = "<<WIDTH*l_range;
   qDebug()<<"HEIGHT * h_header * h_number_range = "<<HEIGHT*h_header*h_number_range;
 
   numberRange = new Text(30,20,"h",this);
   numberRange->setPos(10,10);
 
   boundingWidth =  WIDTH;
   boundingHeight = HEIGHT;
}
 
KMT::~KMT()
{
   qDebug()<<"delete KMT";
}
 
QRectF KMT::boundingRect() const
{
   return QRectF(0,0,200,100);
}
 
void KMT::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
   QPen pen(QBrush(Qt::black),1,Qt::SolidLine);
   painter->setBrush(Qt::white);
   painter->setPen(pen);
   painter->drawPath(shape());
}
 
QPainterPath KMT::shape() const
{
   QPainterPath path;
   QPolygon polygon;
   polygon << QPoint(0 ,0)
           << QPoint(boundingWidth,0)
           << QPoint(boundingWidth,boundingHeight)
           << QPoint(0,boundingHeight)
           << QPoint(0,0);
 
   path.addPolygon(polygon);
   return path;
}
 
SceneKMT::SceneKMT(QObject *parent):
   QGraphicsScene()
{
   setBackgroundBrush(QBrush(Qt::lightGray));
   setSceneRect(0,0,800,600);
 
   kmt = new KMT(0.01,3);
   kmt->setPos(0,400);
   addItem(kmt);
}
 

и добавляю на сцену
в объекте КМТ находится объет типа класса Text
но почему-то на сцене он не появляется Непонимающий

А если объект  класса Text просто на сцену добавить, то все норм.
« Последнее редактирование: Август 27, 2014, 10:24 от demaker » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 27, 2014, 14:45 »

Исправь
Код
C++ (Qt)
Text::Text(int w, int h, QString str, QGraphicsObject *parent)
   : QGraphicsObject()
 
на
Код
C++ (Qt)
Text::Text(int w, int h, QString str, QGraphicsObject *parent)
   : QGraphicsObject(parent)
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.15 секунд. Запросов: 23.