直播平臺製作,私密內容自帶毛玻璃效果如何實現

zhibo系統開發發表於2022-03-11

直播平臺製作,私密內容自帶毛玻璃效果如何實現的相關程式碼

程式程式碼:

#ifndef SYSDIALOG_H
#define SYSDIALOG_H
 
#include <qdialog.h>
#include <QGraphicsBlurEffect>
#include <QGraphicsPixmapItem>
#include <QPaintEvent>
#include <QPainter>
#include <QTimer>
#include <QDebug>
#include <QApplication>
#include <QDesktopWidget>
#include <QEvent>
#include <QMouseEvent>
#include <qscreen.h>
#include <QHBoxLayout>//水平
#include <QVBoxLayout>//垂直
#include <qspinbox.h>
class SysDialog : public QDialog
{
    Q_OBJECT
 
public:
    explicit SysDialog(QWidget *parent = nullptr);
    ~SysDialog();
    void paintEvent(QPaintEvent *event);
private:
    QVBoxLayout *Main_VBoxLayout;
    QHBoxLayout *Main_HBoxLayout;
    QSpinBox    *Value_SpinBox;
    QColor bgColor;
private slots:
    void Value_SpinBox_valueChanged_Slot(int v);
};
 
#endif // SYSDIALOG_H
#include "SysDialog.h"
#include <qthread.h>
#include <Windows.h>
//
enum AccentState
{
        ACCENT_DISABLED = 0,
        ACCENT_ENABLE_GRADIENT = 1,
        ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
        ACCENT_ENABLE_BLURBEHIND = 3,
        ACCENT_INVALID_STATE = 4
};
struct AccentPolicy
{
        AccentState AccentState;
        int AccentFlags;
        int GradientColor;
        int AnimationId;
};
enum WindowCompositionAttribute
{
        WCA_UNDEFINED = 0,
        WCA_NCRENDERING_ENABLED = 1,
        WCA_NCRENDERING_POLICY = 2,
        WCA_TRANSITIONS_FORCEDISABLED = 3,
        WCA_ALLOW_NCPAINT = 4,
        WCA_CAPTION_BUTTON_BOUNDS = 5,
        WCA_NONCLIENT_RTL_LAYOUT = 6,
        WCA_FORCE_ICONIC_REPRESENTATION = 7,
        WCA_EXTENDED_FRAME_BOUNDS = 8,
        WCA_HAS_ICONIC_BITMAP = 9,
        WCA_THEME_ATTRIBUTES = 10,
        WCA_NCRENDERING_EXILED = 11,
        WCA_NCADORNMENTINFO = 12,
        WCA_EXCLUDED_FROM_LIVEPREVIEW = 13,
        WCA_VIDEO_OVERLAY_ACTIVE = 14,
        WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15,
        WCA_DISALLOW_PEEK = 16,
        WCA_CLOAK = 17,
        WCA_CLOAKED = 18,
        WCA_ACCENT_POLICY = 19,
        WCA_FREEZE_REPRESENTATION = 20,
        WCA_EVER_UNCLOAKED = 21,
        WCA_VISUAL_OWNER = 22,
        WCA_LAST = 23
};
struct WindowCompositionAttributeData
{
        WindowCompositionAttribute Attribute;
        int * Data;
        int SizeOfData;
};
 
typedef int* (*pfun)(HWND hwnd, WindowCompositionAttributeData *data);
SysDialog::SysDialog(QWidget *parent)
    : QDialog(parent)
{
 
//    setWindowFlags(Qt::FramelessWindowHint);
    HWND hWnd = HWND(winId());
    HMODULE hUser = GetModuleHandle(L"user32.dll");
 
    if (hUser) {
        pfun setWindowCompositionAttribute = (pfun)GetProcAddress(hUser, "SetWindowCompositionAttribute");
        if (setWindowCompositionAttribute) {
//            AccentPolicy accent = { ACCENT_ENABLE_BLURBEHIND, 0x20 | 0x40 | 0x80 | 0x100, 0, 0 };
            AccentPolicy accent = { ACCENT_ENABLE_BLURBEHIND,0, 0, 0 };
            WindowCompositionAttributeData data;
            data.Attribute = WCA_ACCENT_POLICY;
            data.Data = reinterpret_cast<int *>(&accent) ;
            data.SizeOfData = sizeof(accent);
            setWindowCompositionAttribute(hWnd, &data);
        }
    }
    this->setAttribute(Qt::WA_TranslucentBackground);//設定視窗背景透明
//    setWindowOpacity(1);
    setWindowTitle(QString(""));
 
    Main_VBoxLayout = new QVBoxLayout(this);
    Main_HBoxLayout = new QHBoxLayout;
    Value_SpinBox   = new QSpinBox;
    Value_SpinBox->setMaximum(255);
    Value_SpinBox->setValue(50);
    connect(Value_SpinBox, SIGNAL(valueChanged(int)), this, SLOT(Value_SpinBox_valueChanged_Slot(int)));
 
 
 
    Main_HBoxLayout->addWidget(Value_SpinBox,0);
    Main_HBoxLayout->addStretch();
    Main_HBoxLayout->setContentsMargins(0,0,0,0);
    Main_HBoxLayout->setSpacing(0);
 
 
    Main_VBoxLayout->addLayout(Main_HBoxLayout,0);
    Main_VBoxLayout->addStretch();
    Main_VBoxLayout->setContentsMargins(0,0,0,0);
    Main_VBoxLayout->setSpacing(0);
    resize(900,600);
 
    //
    bgColor = QColor(255, 255, 255, 100);
}
 
SysDialog::~SysDialog()
{
    delete Main_VBoxLayout;
}
 
void SysDialog::Value_SpinBox_valueChanged_Slot(int v)
{
    qDebug()<<v;
    bgColor.setAlpha(v);
    update();
}
 
/*
 * Event Function
 */
void SysDialog::paintEvent(QPaintEvent *event)
{
    static bool v = false;
    if (v) return;
 
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::NoPen);
    painter.setBrush(bgColor);
    painter.drawRoundedRect(rect(), 0, 0);
    v = true;
    //painter.fillRect(ui.frame->rect(), bgColor);
}


以上就是直播平臺製作,私密內容自帶毛玻璃效果如何實現的相關程式碼, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2869367/,如需轉載,請註明出處,否則將追究法律責任。

相關文章