C++ QRubberBand,如何利用它

C++ QRubberBand,如何利用它,c++,qt,draw,rubber,qrubberband,C++,Qt,Draw,Rubber,Qrubberband,我试图在QRubberBand对象上绘制数字。我有一个带有QRubberBand对象rectangleRubberBand的类小部件 我可以显示此区域等,但我尝试在小部件上绘制区域而不是一些数字,例如此区域的宽度和高度。我该怎么做?这是用来测量图表的 它不是在橡皮筋上画,但它可以满足您的需要: void MyButton::mouseMoveEvent(QMouseEvent *event) { rubberBand->setGeometry(QRect(mypoint, even

我试图在
QRubberBand
对象上绘制数字。我有一个带有
QRubberBand
对象
rectangleRubberBand
的类小部件


我可以显示此区域等,但我尝试在小部件上绘制区域而不是一些数字,例如此区域的宽度和高度。我该怎么做?这是用来测量图表的

它不是在橡皮筋上画,但它可以满足您的需要:

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
\ifndef RUBBERBAND\u H
#定义橡胶带
#包括
#包括
橡胶带类:公共橡胶带
{
Q_对象
公众:
显式橡皮筋(s形,QWidget*p=0);
信号:
受保护的:
无效油漆事件(QPaintEvent*事件);
公众时段:
};
#endif//RUBBERBAND_H
cpp:

#包括“rubberband.h”
#包括
RubberBand::RubberBand(QRubberBand::形状s,QWidget*p):
QRubberBand(s,p)
{
}
void RubberBand::paintEvent(QPaintEvent*事件)
{
QRubberBand::paintEvent(事件);
油漆工p(本);
p、 setPen(QPen(Qt::黑色,2));
如果(size().width()>10和&size().height()>10)
{
p、 drawText(20,20,QString(“%1,%2”).arg(size().width()).arg(size().height());
}
}
结果:


选择最适合您的方法。

是否有机会在橡胶带的右中间看到这些数字?不是右下角吗?@Shepherd使用橡皮筋的中心代替20,20例如,这是一个简单的绘图,您可以在小部件上的任何位置绘制此文本。
#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()));
    }
}