void Form::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setBrush(Qt::white); painter.drawRect(0, 0, this->width(), this->height()); //先画成白色 if (mImage.size().width() <= 0) return; //将图像按比例缩放成和窗口一样大小 QImage img = mImage.scaled(this->size(),Qt::KeepAspectRatio); int x = this->width() - img.width(); int y = this->height() - img.height(); x /= 2; y /= 2; painter.drawImage(QPoint(x,y),img); //画出图像 if(open_red==true){ QWidget *red_video=new QWidget(this); red_video->resize(this->width()/3,this->height()/3); //提取出图像中的R数据 painter.setBrush(Qt::white); painter.drawRect(0, 0, red_video->width(),red_video->height()); //先画成白色 if (R_mImage.size().width() <= 0) return; //将图像按比例缩放成和窗口一样大小 QImage R_img = R_mImage.scaled(red_video->size(),Qt::KeepAspectRatio); int R_x = red_video->width() - R_img.width(); int R_y = red_video->height() - R_img.height(); R_x /= 2; R_y /= 2; painter.drawImage(QPoint(R_x,R_y),R_img); //画出图像 } }
时间: 2023-06-27 13:02:58 浏览: 69
这段代码是一个继承自QWidget的自定义控件Form的paintEvent()函数实现。它会在窗口需要重绘时被调用,以便绘制窗口的外观。
首先,它会创建一个QPainter对象,用于在窗口上绘制图像。然后,它设置了画刷颜色为白色,并用画刷填充整个窗口。接着,它会检查mImage图片是否有宽度,如果没有就返回。然后,它将mImage图片按比例缩放,使其与窗口大小一致,并将其绘制在窗口中心位置。
最后,如果open_red变量为true,它将创建一个QWidget对象red_video,并将其大小设置为窗口大小的1/3。然后,它再次设置画刷颜色为白色,并用画刷填充red_video。接着,它检查R_mImage图片是否有宽度,如果没有就返回。然后,它将R_mImage图片按比例缩放,使其与red_video大小一致,并将其绘制在red_video中心位置。
总体来说,这段代码实现了在窗口中心绘制一张图片,并在窗口右下角绘制另一张图片的功能。
阅读全文