我想绘制一个未填充的圆圈,当用户点击它时,它应该被填充。在圈内我想写一个数字。
我尝试使用QPixmap,QLabel和一些QPainterPath来使其工作,但我无法这样做。 我怎样才能做到这一点?
我需要圆圈没有背景,只有圈内有一个数字。填充圆圈内部是可选的,一次填充颜色,一次没有。请指教。
答案 0 :(得分:1)
通过子类化QWidget,这非常简单,如下面的示例代码所示:
#include <QApplication>
#include <QMouseEvent>
#include <QWidget>
#include <QPainter>
class CircleWidget : public QWidget
{
public:
CircleWidget(int number) : _number(number), _fill(false) {/*empty*/}
virtual void paintEvent(QPaintEvent * e)
{
e->accept();
QPainter p(this);
QRect r = rect();
p.setPen(Qt::black);
if (_fill) p.setBrush(Qt::green);
p.drawEllipse(r);
p.drawText(r, Qt::AlignCenter, QString("%1").arg(_number));
}
virtual void mousePressEvent(QMouseEvent * e)
{
_fill = !_fill;
update(); // this will induce another call to paintEvent() ASAP
e->accept();
}
private:
const int _number;
bool _fill;
};
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
CircleWidget cw(5);
cw.resize(60,60);
cw.show();
return app.exec();
}
答案 1 :(得分:0)
假设您正在使用QGraphicsWidget
,则必须覆盖QGraphicsWidget::paint(QPainter *, QStyleOptionGraphicsItem const*, QWidget *)
。制作pressed
私有成员变量,并在mousePressEvent()
和mouseReleaseEvent()
中进行更改。
在绘画功能中,使用painter->setPen()
设置边框,使用painter->setBrush()
设置填充属性。使用painter->drawEllipse()
绘制圆圈,使用painter->drawText()
绘制带有对齐设置的QTextOption
。您还必须覆盖boundingRect()
并使其返回窗口小部件的边界,并在绘图函数中使用它。
或者,如果是常规窗口小部件,请覆盖paintEvent()
,创建QPainter
,将窗口小部件设为父级,并使用size()
矩形绘制。
希望它有所帮助,让我知道结果。