在上一篇博客中qt在视频上方添加透明窗体,写到了一种方法,能够简单避免qt控件遮挡第三方所显示的视频,但是那种方式实际上并没有从根本上解决问题。
但是有的时候,使用Qt的GDI绘图,却能有奇效;在此简单记录一下qt GDI绘图的总结。
以QLabel为例,重写QLabel的paintEngine(),使其返回值为空。
对于需要GDI绘图的控件,在其构造函数中设置属性:setAttribute(Qt::WA_PaintOnScreen, true);
获取该控件的句柄,DC:
myLabel::myLabel(QWidget *parent)
: QLabel(parent)
{
setAttribute(Qt::WA_PaintOnScreen, true);
hwnd = (HWND)this->winId();
labelHDC = GetDC(hwnd);
}
QPaintEngine* myLabel::paintEngine() const
{
return nullptr;
}
创建一个绘图函数:,即可完成绘制
void myLabel::drawSomeThing()
{
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
(HPEN)SelectObject(labelHDC, hPen);
{
MoveToEx(labelHDC, 100, 100, NULL);//起点定在坐标(100,100)处
LineTo(labelHDC, 200, 200);//画一个(100,100)到(200,200)的线条
MoveToEx(labelHDC, 200, 100, NULL);//起点定在坐标(100,100)处
LineTo(labelHDC, 100, 200);//画一个(100,100)到(200,200)的线条
}
}