一般在Qt中,可以使用QLabel控件来显示图片。但是使用QLabel既显示图片又显示自己绘制的图形,会很不方便。可以自定义个类,继承自QLabel,并且重写QLabel的paintEvent方法,在此方法中,绘制自己的图形。
这里自定的类为MyLabel,源码如下:
MyLabel.h

#pragma once#include <QtWidgets/QLabel>class MyLabel : public QLabel{public: MyLabel(QWidget parent); void MyLabel::paintEvent(QPaintEvent e) override;private: QPixmap m_Img;};
MyLabel.cpp
【领更多QT学习资料,点击下方链接免费领取↓↓,先码住不迷路~】
点击→Qt开发(资料笔记文档+视频教程+项目实战)
#include <QtGUI/QPainter>#include "MyLabel.h"MyLabel::MyLabel(QWidget parent) :QLabel(parent){ m_Img = QPixmap("test.png"); setPixmap(m_Img); setGeometry(50, 50, m_Img.width(), m_Img.height());}void MyLabel::paintEvent(QPaintEvent e){ QLabel::paintEvent(e);//调用基类的绘制方法,绘制图片背景 QPainter painter(this); QPen pen(QColor(255, 222, 0), 2); painter.setPen(pen); painter.drawRect(30, 30, 400, 400);//绘制矩形}
在MyLabel的paintEvent 方法中,先调用基类的paintEvent方法,是为了绘制背景图片,若不调用这个方法,背景图片将不会绘制。
main.cpp
#include <QtWidgets/QApplication>#include <QtWidgets/QWidget>#include "MyLabel.h"int main(int argc, char argv[]){ QApplication app(argc, argv); QWidget widget; widget.setWindowTitle("ShowPicture"); widget.resize(900, 600); MyLabel lbl = new MyLabel(&widget); widget.showNormal(); return app.exec();}
最终的效果: