在paintEvent函数中:
QPainter painter(this);
painter.drawPixmap(0, 0, this->width(), this->height(), QPixmap("../painter/temp.png"));//使用painter目录下的temp.png图片填充整个窗口
painter.drawPixmap好像无法绘制bmp。尝试使用bmp格式的图片绘制无法绘制。
painter.drawEllipse(20, 20, this->width() - 20, this->height() - 20);//绘制一个椭圆,函数多有重载,此处只是其中一个。
使用画笔
QPen pen;
pen.setColor(QColor(146,168,209)); //设置画笔颜色为粉蓝色
pen.setStyle(Qt::SolidLine); //设置画笔风格为实线
pen.setWidth(10); //设置画笔宽度为10
painter.setPen(pen); //设置为画笔
painter.drawRect(20, 20, 200, 122); //开始绘制矩形
//绘制直线
painter.drawLine(this->width()*0.2, this->height()*0.39, this->width()*0.8, this->height()*0.39)
使用画刷
QBrush brush;
brush.setColor(QColor(146,168,209)); //设置画刷颜色为粉蓝色
brush.setStyle(Qt::CrossPattern); //设置画刷风格为交叉线
painter.setBrush(brush); //设置当前画刷
//绘制矩形
painter.drawRect(20, 20, this->width() - 40, this->height() - 40);
static const QPointF points[4] = {
QPointF(10.0, 80.0),
QPointF(20.0, 10.0),
QPointF(80.0, 30.0),
QPointF(90.0, 70.0)
};
painter.drawPolygon(points, 4); //绘制多边形
注意:在paintEvent函数中不可进行update,会照成死循环消耗CPU。
捕获窗口关闭事件:
重载closeEvent函数
void Widget::closeEvent(QCloseEvent *event)
{
int ret = QMessageBox::information(this,"confirm", "are you sure to quit?", QMessageBox::Yes|QMessageBox::No);
if(ret == QMessageBox::Yes)
event->accept(); //如果确认则关闭
else
event->ignore(); //若选择No则忽略此事件
}
捕获窗口尺寸改变事件:
重载resizeEvent函数:
void Widget::resizeEvent(QResizeEvent *event)
{
qDebug() << event->oldSize() << endl; //输出旧的窗口大小
qDebug() << event->size() << endl; //输出窗口现在的大小
this->update(); //更新
}