QT类提升机制
远程遥控驾驶项目中
需要在视频图像上实现车道及引导线
QT中 使用QPainter绘制图片时,发现只能够在当前类中执行绘制操作
但是当前类绘制时,只能绘制在MainWindow上 而绘制的内容会被上方QLabel的视频遮挡
解决这个问题的办法是:
实现在ui子控件中绘图 然后将子控件放置在视频QLabel上方
1.创建
以QLabel为子控件,说明该创建过程
- 在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);
//进行绘制操作
}
- 在界面设计文件mainwindow.ui中拖入一个QLabel控件,右键->提升为->选择基类QLabel->名称为PaintLabel->输入h文件paintlabel.h->选中->提升
2.问题
以上需要解决的问题仍有三个:
1.提升类的路径问题 需要在auto_generate
中paintlabel.h
路径的问题
需要跟实际的路径进行匹配 修改ui_mainwindow.h src/paintlabel.h
问题解决
也可以在提升编辑时修改好 有待尝试
- paintEvent后仍需要update
将paintlabel作为成员加入mainwindow类中 update需要放在主函数中 循环调度 并且 paintEvent的绘制坐标系以QLabel为准
- paintEvent的数据 仍需要从mainwindow类中读取,所以需要全局变量来传递参数
extern的定义需要在类定义之外进行