Qt类提升机制

QT类提升机制

远程遥控驾驶项目中

需要在视频图像上实现车道及引导线

QT中 使用QPainter绘制图片时,发现只能够在当前类中执行绘制操作

但是当前类绘制时,只能绘制在MainWindow上 而绘制的内容会被上方QLabel的视频遮挡

解决这个问题的办法是:

实现在ui子控件中绘图 然后将子控件放置在视频QLabel上方

1.创建

以QLabel为子控件,说明该创建过程

  1. 在QT工程中新建一个PaintLabel,继承自QLabel

paintlabel.h文件


#ifndef PAINTLABEL_H
#define PAINTLABEL_H
#include <QLabel>
 
class PaintLabel:public QLabel
{
    Q_OBJECT
public:
    explicit PaintLabel(QWidget *parent = 0);
    void paintEvent(QPaintEvent *event);
};

paintlabel.c文件

#include <QPainter>
#include <QDebug>
#include <extern.h>
#include <QtWidgets/qframe.h>
#include <QWidget>
#include <sys/time.h>
PaintLabel::PaintLabel(QWidget *parent):QLabel(parent)
{
}
void PaintLabel::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    //进行绘制操作

}

  1. 在界面设计文件mainwindow.ui中拖入一个QLabel控件,右键->提升为->选择基类QLabel->名称为PaintLabel->输入h文件paintlabel.h->选中->提升

tis.png

2.问题

以上需要解决的问题仍有三个:

1.提升类的路径问题 需要在auto_generatepaintlabel.h路径的问题

需要跟实际的路径进行匹配 修改ui_mainwindow.h src/paintlabel.h问题解决

也可以在提升编辑时修改好 有待尝试

test1.png

  1. paintEvent后仍需要update

将paintlabel作为成员加入mainwindow类中 update需要放在主函数中 循环调度 并且 paintEvent的绘制坐标系以QLabel为准

  1. paintEvent的数据 仍需要从mainwindow类中读取,所以需要全局变量来传递参数

extern的定义需要在类定义之外进行


updatedupdated2022-03-022022-03-02