画一个里面有数字的实心圆

Draw a filled circle with number inside

我想画一个未填充的圆圈,当用户点击它时,它应该被填充。圈内我想写个位数。

我尝试了 QPixmap、QLabel 和一些 QPainterPath 来让它工作,但我无法这样做。 我怎样才能做到这一点?

我需要圆圈没有背景,只圈自己,里面有一个数字。圆圈内部的填充是可选的,一次填充颜色,一次不填充。请指教

假设您正在处理 QGraphicsWidget,您必须覆盖 QGraphicsWidget::paint(QPainter *, QStyleOptionGraphicsItem const*, QWidget *)。使您的 pressed 私有成员变量并在 mousePressEvent()mouseReleaseEvent().

中更改它

在画图功能中,使用painter->setPen()设置边框,使用painter->setBrush()设置填充属性。使用 painter->drawEllipse() 绘制圆,使用 QTextOption 绘制 painter->drawText() 并设置对齐。您还必须覆盖 boundingRect() 并使其成为小部件的 return 边界,并在绘制函数中使用它。

或者,如果它是常规小部件,则覆盖 paintEvent(),创建 QPainter 并将小部件作为父级并使用 size() 矩形绘制。

希望对你有帮助,告诉我结果。

这通过子类化 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();
}