QRubberBand, как на нем рисовать

Я пытаюсь нарисовать числа на объекте QRubberBand. У меня есть виджет класса с QRubberBand объектом rectangleRubberBand;

Я могу показать эту область и т.д., но я пытаюсь нарисовать на области не на виджете некоторые числа, например ширину и высоту этой области. Как я могу это сделать? Это для измерения диаграммы.


person Shepherd    schedule 25.11.2014    source источник


Ответы (1)


Он не рисует на резинке, но делает то, что вам нужно:

void MyButton::mouseMoveEvent(QMouseEvent *event)
{
    rubberBand->setGeometry(QRect(mypoint, event->pos()).normalized());//Area Bounding
    QToolTip::showText( event->globalPos(), QString("%1,%2")
                                             .arg(rubberBand->size().width())
                                             .arg(rubberBand->size().height()),this );
}

Рядом с курсором отображается QToolTip. Он динамически меняется и показывает актуальную информацию о размере резинки.

Результат (черная область - курсор):

введите здесь описание изображения

Более сложное решение: подкласс QRubberBand и повторная реализация paintEvent. Например:

Заголовок:

#ifndef RUBBERBAND_H
#define RUBBERBAND_H

#include <QRubberBand>
#include <QPaintEvent>

class RubberBand : public QRubberBand
{
    Q_OBJECT
public:
    explicit RubberBand(Shape s, QWidget * p = 0);


signals:

protected:
    void paintEvent(QPaintEvent *event);

public slots:

};

#endif // RUBBERBAND_H

cpp:

#include "rubberband.h"
#include <QPainter>
RubberBand::RubberBand(QRubberBand::Shape s, QWidget *p) :
    QRubberBand(s,p)
{
}

void RubberBand::paintEvent(QPaintEvent *event)
{
    QRubberBand::paintEvent(event);
    QPainter p(this);
    p.setPen(QPen(Qt::black,2));
    if(size().width() >10 && size().height() >10)
    {
        p.drawText(20,20,QString("%1,%2").arg(size().width()).arg(size().height()));
    }
}

Результат:

введите здесь описание изображения

Выберите лучший подход для вас.

person Kosovan    schedule 25.11.2014
comment
есть ли шанс увидеть эти цифры в правой середине резинки? не справа внизу? - person Shepherd; 25.11.2014
comment
@Shepherd вместо 20,20 используйте, например, центр резинки, это простой рисунок, вы можете нарисовать этот текст в любом месте виджета. - person Kosovan; 25.11.2014