QRubberBand,如何在上面画画
Posted
技术标签:
【中文标题】QRubberBand,如何在上面画画【英文标题】:QRubberBand, how to draw on it 【发布时间】:2014-11-25 19:49:42 【问题描述】:我正在尝试在 QRubberBand
对象上绘制数字。我有带有QRubberBand
对象rectangleRubberBand
的类小部件;
我可以显示这个区域等,但我试图在小部件上的区域 not 上绘制一些数字,例如该区域的宽度和高度。我怎样才能做到这一点?这是为了衡量图表的目的。
【问题讨论】:
【参考方案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()));
结果:
选择最适合您的方法。
【讨论】:
有没有机会在橡皮筋的右边看到这个数字?不是右下角? @Shepherd 代替 20,20 使用例如橡皮筋的中心,它是简单的绘图,您可以在小部件上的任何位置绘制此文本。以上是关于QRubberBand,如何在上面画画的主要内容,如果未能解决你的问题,请参考以下文章