QT 气泡消息绘制

bool QdsTextMessageControl::eventFilter(QObject *watched, QEvent *event)
{
    if (watched == m_pFrameMessage)
    {
        if (event->type() == QEvent::Paint)
        {
            switch (m_TextMessageType)
            {
            case Me:
            {
                QColor colorBg(11, 19, 39);

                QPainter painter(m_pFrameMessage);
                painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothpixmapTransform);//消锯齿
                painter.setPen(Qt::nopen);

                QColor colorKuang(44, 116, 250);
                painter.setBrush(QBrush(colorKuang));

                //框加边
                painter.drawRoundedRect(0, 0, m_pFrameMessage->width() - TriangleWidth, m_pFrameMessage->height(), 4, 4); 

                //绘制框
                painter.setBrush(QBrush(colorBg));
                painter.drawRoundedRect(1, 1, m_pFrameMessage->width() - TriangleWidth - 2, m_pFrameMessage->height() - 2, 4, 4);//减1表示边大小

                //三角的边
                QPointF pointsBorder[3] = {
                    QPointF(m_pFrameMessage->width(), m_pFrameMessage->height() / 2),
                    QPointF(m_pFrameMessage->width() - TriangleWidth, m_pFrameMessage->height() / 2 - TriangleWidth),
                    QPointF(m_pFrameMessage->width() - TriangleWidth, m_pFrameMessage->height() / 2 + TriangleWidth),
                };
                QPen pen;
                pen.setColor(colorKuang);
                painter.setPen(pen);
                painter.drawpolygon(pointsBorder, 3);

                //三角内框
                QPointF points[3] = {
                    QPointF(m_pFrameMessage->width()-1, m_pFrameMessage->height() / 2),
                    QPointF(m_pFrameMessage->width() - TriangleWidth - 1, m_pFrameMessage->height() / 2 - TriangleWidth),
                    QPointF(m_pFrameMessage->width() - TriangleWidth - 1, m_pFrameMessage->height() / 2 + TriangleWidth),
                };
                pen.setColor(colorBg);
                painter.setPen(pen);
                painter.drawpolygon(points, 3);
                return false;
            }
            case Kefu:
            {
                QColor colorBg(36, 36, 36);
                QPainter painter(m_pFrameMessage);
                painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothpixmapTransform);//消锯齿
                painter.setPen(Qt::nopen);
                painter.setBrush(QBrush(colorBg));

                //框加边
                painter.drawRoundedRect(TriangleWidth, 0, m_pFrameMessage->width() - TriangleWidth, m_pFrameMessage->height(), 4, 4);

                //三角
                QPointF points[3] = {
                    QPointF(0, m_pFrameMessage->height() / 2),
                    QPointF(TriangleWidth, m_pFrameMessage->height() / 2 - TriangleWidth),
                    QPointF(TriangleWidth, m_pFrameMessage->height() / 2 + TriangleWidth),
                };
                QPen pen;
                pen.setColor(colorBg);
                painter.setPen(pen);
                painter.drawpolygon(points, 3);
                return false;
            }
            default:
                break;
            }
        }
    }
    else
    {
        return false;
    }
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...