美文网首页
QT:在QLabel中绘制背景透明的框线

QT:在QLabel中绘制背景透明的框线

作者: 擎烛而走_b2ce | 来源:发表于2018-06-03 11:10 被阅读0次

    QLabel显示透明背景的框线

    • 首先重写paintEvent事件,建立一个临时的QImage,色彩格式为QImage::format_RGBA8888 ,遍历每一个QImage的像素点,利用setPixelColor将每一个像素点的颜色置为(255,255,255,0),即可完成QImage的透明化。然后在QImage上绘制框线或者其他图片,完成后将QImage加到QLabel中,即完成。

    因为QLabel没有paintEvent事件,所以采用一个临时的QImage先绘制好图片再添加到QLabel中以实现再QLabel中绘图,当然,也可以将paintEvent事件安装到QLabel中,不过相对麻烦,故不采用。

    • 代码
    
    void THM_CT::paintEvent(QPaintEvent * event)
    {
        if (m_showFrameBoolValue == true) {
            QImage imgTmp(m_interceptWidth, m_interceptHeight, QImage::Format_RGBA8888);
            //imageTmp透明化
            for (int i = 0; i < m_interceptWidth; i++) {
                for (int j = 0; j < m_interceptWidth; j++) {
                    QColor color(255, 255, 255, 0);
                    imgTmp.setPixelColor(i, j, color);
                }
            }
            //绘制框线
            QPainter painter(&imgTmp);
            painter.setPen(QPen(Qt::blue, 5));
            painter.setBrush(Qt::NoBrush);
            painter.drawRect(0, 0, m_interceptWidth, m_interceptHeight);
            m_showImageIncrept->setPixmap(QPixmap::fromImage(imgTmp));
            m_showImageIncrept->resize(m_interceptWidth, m_interceptHeight);
            m_showImageIncrept->move(m_interceptX, m_interceptY);
        }
    }
    

    相关文章

      网友评论

          本文标题:QT:在QLabel中绘制背景透明的框线

          本文链接:https://www.haomeiwen.com/subject/cycjsftx.html