你需要重写paintEvent()函数,并在其中绘制内容。你并不需要使用begin()
和end()
函数。使用以下方式声明一个绘图器:
QPainter painter(this);
构造函数将处理
begin()
,当
painter
对象超出作用域并被销毁时,
end()
将被调用。
您也不需要单击事件来触发绘图。每当小部件需要绘制自身时,都会调用
paintEvent()
。您可以使用按钮单击来切换一个布尔值,
paintEvent()
检查以确定是否应显示矩形和弧形。请确保在切换变量后调用
update()
。
void Widget::on_pushButton_clicked()
{
drawShapes = !drawShapes;
update();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
if(drawShapes)
{
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
painter.drawArc(rectangle, startAngle, spanAngle);
}
}
更新:
为了避免必须重写一个小部件的paintEvent()
,你可以使用一个QLabel
并将一个像素图分配给它并绘制到那里。注意:据我所知,每次修改像素图时都需要设置它。
void MainForm::slot_buttonClick()
{
QPixmap pixmap(100,100);
pixmap.fill(QColor("transparent"));
QPainter painter(&pixmap);
painter.setBrush(QBrush(Qt::black));
painter.drawRect(10, 10, 100, 100);
label.setPixmap(pixmap);
}