mirror of
https://github.com/zhuzichu520/FluentUI.git
synced 2025-07-03 08:35:28 +08:00
添加支持windows系统窗口win7-win10(area、blur)、win11(mica、mica-alt)效果切换,修改夜间模式切换动画效果,支持动画打断;
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
#include "FluFrameless.h"
|
||||
#include "FluTheme.h"
|
||||
|
||||
#include <QQuickWindow>
|
||||
#include <QGuiApplication>
|
||||
@ -8,12 +9,69 @@
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
#pragma comment (lib, "user32.lib")
|
||||
#pragma comment (lib, "dwmapi.lib")
|
||||
static RTL_OSVERSIONINFOW GetRealOSVersionImpl() {
|
||||
HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
|
||||
using RtlGetVersionPtr = NTSTATUS(WINAPI *)(PRTL_OSVERSIONINFOW);
|
||||
auto pRtlGetVersion =
|
||||
reinterpret_cast<RtlGetVersionPtr>(::GetProcAddress(hMod, "RtlGetVersion"));
|
||||
RTL_OSVERSIONINFOW rovi{};
|
||||
rovi.dwOSVersionInfoSize = sizeof(rovi);
|
||||
pRtlGetVersion(&rovi);
|
||||
return rovi;
|
||||
}
|
||||
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <dwmapi.h>
|
||||
RTL_OSVERSIONINFOW GetRealOSVersion() {
|
||||
static const auto result = GetRealOSVersionImpl();
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline bool isWin8OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 2);
|
||||
}
|
||||
|
||||
static inline bool isWin8Point1OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 6) || (rovi.dwMajorVersion == 6 && rovi.dwMinorVersion >= 3);
|
||||
}
|
||||
|
||||
static inline bool isWin10OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 10) || (rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0);
|
||||
}
|
||||
|
||||
static inline bool isWin101809OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 10) ||
|
||||
(rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 17763);
|
||||
}
|
||||
|
||||
static inline bool isWin101903OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 10) ||
|
||||
(rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 18362);
|
||||
}
|
||||
|
||||
static inline bool isWin11OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 10) ||
|
||||
(rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 22000);
|
||||
}
|
||||
|
||||
static inline bool isWin1122H2OrGreater() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return (rovi.dwMajorVersion > 10) ||
|
||||
(rovi.dwMajorVersion == 10 && rovi.dwMinorVersion >= 0 && rovi.dwBuildNumber >= 22621);
|
||||
}
|
||||
|
||||
static inline bool isWin10Only() {
|
||||
return isWin10OrGreater() && !isWin11OrGreater();
|
||||
}
|
||||
|
||||
static inline bool isWin7Only() {
|
||||
RTL_OSVERSIONINFOW rovi = GetRealOSVersion();
|
||||
return rovi.dwMajorVersion = 7;
|
||||
}
|
||||
|
||||
static inline QByteArray qtNativeEventType() {
|
||||
static const auto result = "windows_generic_MSG";
|
||||
@ -48,6 +106,138 @@ static inline void setShadow(HWND hwnd) {
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool setWindowDarkMode(HWND hwnd, const BOOL enable) {
|
||||
return bool(DwmSetWindowAttribute(hwnd, DWMWINDOWATTRIBUTE::DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||||
&enable, sizeof(BOOL)));
|
||||
}
|
||||
|
||||
static inline bool setWindowEffect(HWND hwnd, const QString &key, const bool &enable) {
|
||||
static constexpr const MARGINS extendedMargins = {-1, -1, -1, -1};
|
||||
if (key == QStringLiteral("mica")) {
|
||||
if (!isWin11OrGreater()) {
|
||||
return false;
|
||||
}
|
||||
if (enable) {
|
||||
DwmExtendFrameIntoClientArea(hwnd, &extendedMargins);
|
||||
if (isWin1122H2OrGreater()) {
|
||||
const DWM_SYSTEMBACKDROP_TYPE backdropType = DWMSBT_MAINWINDOW;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdropType,
|
||||
sizeof(backdropType));
|
||||
} else {
|
||||
const BOOL enable = TRUE;
|
||||
DwmSetWindowAttribute(hwnd, 1029, &enable, sizeof(enable));
|
||||
}
|
||||
} else {
|
||||
if (isWin1122H2OrGreater()) {
|
||||
const DWM_SYSTEMBACKDROP_TYPE backdropType = DWMSBT_AUTO;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdropType,
|
||||
sizeof(backdropType));
|
||||
} else {
|
||||
const BOOL enable = FALSE;
|
||||
DwmSetWindowAttribute(hwnd, 1029, &enable, sizeof(enable));
|
||||
}
|
||||
}
|
||||
BOOL isDark = FluTheme::getInstance()->dark();
|
||||
setWindowDarkMode(hwnd, isDark);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (key == QStringLiteral("mica-alt")) {
|
||||
if (!isWin1122H2OrGreater()) {
|
||||
return false;
|
||||
}
|
||||
if (enable) {
|
||||
DwmExtendFrameIntoClientArea(hwnd, &extendedMargins);
|
||||
const DWM_SYSTEMBACKDROP_TYPE backdropType = DWMSBT_TABBEDWINDOW;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdropType,
|
||||
sizeof(backdropType));
|
||||
} else {
|
||||
const DWM_SYSTEMBACKDROP_TYPE backdropType = DWMSBT_AUTO;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdropType,
|
||||
sizeof(backdropType));
|
||||
}
|
||||
BOOL isDark = FluTheme::getInstance()->dark();
|
||||
setWindowDarkMode(hwnd, isDark);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (key == QStringLiteral("acrylic")) {
|
||||
if (!isWin11OrGreater()) {
|
||||
return false;
|
||||
}
|
||||
if (enable) {
|
||||
MARGINS margins{-1, -1, -1, -1};
|
||||
DwmExtendFrameIntoClientArea(hwnd, &margins);
|
||||
DWM_SYSTEMBACKDROP_TYPE system_backdrop_type =
|
||||
DWM_SYSTEMBACKDROP_TYPE::DWMSBT_TRANSIENTWINDOW;
|
||||
DwmSetWindowAttribute(hwnd, DWMWINDOWATTRIBUTE::DWMWA_SYSTEMBACKDROP_TYPE,
|
||||
&system_backdrop_type, sizeof(DWM_SYSTEMBACKDROP_TYPE));
|
||||
} else {
|
||||
const DWM_SYSTEMBACKDROP_TYPE backdropType = DWMSBT_AUTO;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdropType,
|
||||
sizeof(backdropType));
|
||||
}
|
||||
BOOL isDark = FluTheme::getInstance()->dark();
|
||||
setWindowDarkMode(hwnd, isDark);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (key == QStringLiteral("dwm-blur")) {
|
||||
if (isWin7Only() && !isCompositionEnabled()) {
|
||||
return false;
|
||||
}
|
||||
BOOL isDark = FluTheme::getInstance()->dark();
|
||||
setWindowDarkMode(hwnd, isDark && enable);
|
||||
typedef HRESULT(WINAPI * SetWindowCompositionAttributePtr)(HWND,
|
||||
PWINDOWCOMPOSITIONATTRIBDATA);
|
||||
SetWindowCompositionAttributePtr SetWindowCompositionAttribute;
|
||||
if (isWin8OrGreater()) {
|
||||
HMODULE module = LoadLibraryW(L"user32.dll");
|
||||
SetWindowCompositionAttribute = reinterpret_cast<SetWindowCompositionAttributePtr>(
|
||||
GetProcAddress(module, "SetWindowCompositionAttribute"));
|
||||
if (!SetWindowCompositionAttribute) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (enable) {
|
||||
if (isWin8OrGreater()) {
|
||||
ACCENT_POLICY policy{};
|
||||
policy.dwAccentState = ACCENT_ENABLE_BLURBEHIND;
|
||||
policy.dwAccentFlags = ACCENT_NONE;
|
||||
WINDOWCOMPOSITIONATTRIBDATA wcad{};
|
||||
wcad.Attrib = WCA_ACCENT_POLICY;
|
||||
wcad.pvData = &policy;
|
||||
wcad.cbData = sizeof(policy);
|
||||
SetWindowCompositionAttribute(hwnd, &wcad);
|
||||
} else {
|
||||
DWM_BLURBEHIND bb{};
|
||||
bb.fEnable = TRUE;
|
||||
bb.dwFlags = DWM_BB_ENABLE;
|
||||
DwmEnableBlurBehindWindow(hwnd, &bb);
|
||||
}
|
||||
} else {
|
||||
if (isWin8OrGreater()) {
|
||||
ACCENT_POLICY policy{};
|
||||
policy.dwAccentState = ACCENT_DISABLED;
|
||||
policy.dwAccentFlags = ACCENT_NONE;
|
||||
WINDOWCOMPOSITIONATTRIBDATA wcad{};
|
||||
wcad.Attrib = WCA_ACCENT_POLICY;
|
||||
wcad.pvData = &policy;
|
||||
wcad.cbData = sizeof(policy);
|
||||
SetWindowCompositionAttribute(hwnd, &wcad);
|
||||
} else {
|
||||
DWM_BLURBEHIND bb{};
|
||||
bb.fEnable = FALSE;
|
||||
bb.dwFlags = DWM_BB_ENABLE;
|
||||
DwmEnableBlurBehindWindow(hwnd, &bb);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool containsCursorToItem(QQuickItem *item) {
|
||||
@ -70,6 +260,7 @@ FluFrameless::FluFrameless(QQuickItem *parent) : QQuickItem{parent} {
|
||||
_closeButton = nullptr;
|
||||
_topmost = false;
|
||||
_disabled = false;
|
||||
_effect = "normal";
|
||||
_isWindows11OrGreater = FluTools::getInstance()->isWindows11OrGreater();
|
||||
}
|
||||
|
||||
@ -107,6 +298,9 @@ void FluFrameless::componentComplete() {
|
||||
#endif
|
||||
HWND hwnd = reinterpret_cast<HWND>(window()->winId());
|
||||
DWORD style = ::GetWindowLongPtr(hwnd, GWL_STYLE);
|
||||
# if (QT_VERSION == QT_VERSION_CHECK(6, 7, 2))
|
||||
style &= ~(WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU);
|
||||
# endif
|
||||
if (_fixSize) {
|
||||
::SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_THICKFRAME | WS_CAPTION);;
|
||||
for (int i = 0; i <= QGuiApplication::screens().count() - 1; ++i) {
|
||||
@ -125,6 +319,42 @@ void FluFrameless::componentComplete() {
|
||||
if (!window()->property("_hideShadow").toBool()) {
|
||||
setShadow(hwnd);
|
||||
}
|
||||
if (isWin11OrGreater()) {
|
||||
availableEffects({"mica", "mica-alt", "acrylic", "dwm-blur", "normal"});
|
||||
} else if (isWin7Only()) {
|
||||
availableEffects({"dwm-blur","normal"});
|
||||
}
|
||||
if (!_effect.isEmpty()) {
|
||||
effective(setWindowEffect(hwnd, _effect, true));
|
||||
if (effective()) {
|
||||
_currentEffect = effect();
|
||||
}
|
||||
}
|
||||
connect(this, &FluFrameless::effectChanged, this, [hwnd, this] {
|
||||
if (effect() == _currentEffect) {
|
||||
return;
|
||||
}
|
||||
if (effective()) {
|
||||
setWindowEffect(hwnd, _currentEffect, false);
|
||||
}
|
||||
effective(setWindowEffect(hwnd, effect(), true));
|
||||
if (effective()) {
|
||||
_currentEffect = effect();
|
||||
} else {
|
||||
_effect = "normal";
|
||||
_currentEffect = "normal";
|
||||
}
|
||||
});
|
||||
connect(FluTheme::getInstance(), &FluTheme::blurBehindWindowEnabledChanged, this, [this] {
|
||||
if (FluTheme::getInstance()->blurBehindWindowEnabled()) {
|
||||
effect("normal");
|
||||
}
|
||||
});
|
||||
connect(FluTheme::getInstance(), &FluTheme::darkChanged, this, [hwnd, this] {
|
||||
if (effective() && !_currentEffect.isEmpty() && _currentEffect != "normal") {
|
||||
setWindowDarkMode(hwnd, FluTheme::getInstance()->dark());
|
||||
}
|
||||
});
|
||||
#endif
|
||||
auto appBarHeight = _appbar->height();
|
||||
h = qRound(h + appBarHeight);
|
||||
@ -234,6 +464,9 @@ void FluFrameless::componentComplete() {
|
||||
*result = FALSE;
|
||||
return false;
|
||||
} else if (uMsg == WM_NCACTIVATE) {
|
||||
if (effective() || (!effect().isEmpty() && _currentEffect!="normal")) {
|
||||
return false;
|
||||
}
|
||||
*result = TRUE;
|
||||
return true;
|
||||
} else if (_isWindows11OrGreater && (uMsg == WM_NCLBUTTONDBLCLK || uMsg == WM_NCLBUTTONDOWN)) {
|
||||
|
@ -6,6 +6,82 @@
|
||||
#include <QQmlProperty>
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
#pragma comment (lib, "user32.lib")
|
||||
#pragma comment (lib, "dwmapi.lib")
|
||||
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <dwmapi.h>
|
||||
|
||||
enum WINDOWCOMPOSITIONATTRIB {
|
||||
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_HOLOGRAPHIC = 23,
|
||||
WCA_EXCLUDED_FROM_DDA = 24,
|
||||
WCA_PASSIVEUPDATEMODE = 25,
|
||||
WCA_USEDARKMODECOLORS = 26,
|
||||
WCA_CORNER_STYLE = 27,
|
||||
WCA_PART_COLOR = 28,
|
||||
WCA_DISABLE_MOVESIZE_FEEDBACK = 29,
|
||||
WCA_LAST = 30
|
||||
};
|
||||
|
||||
enum ACCENT_STATE {
|
||||
ACCENT_DISABLED = 0,
|
||||
ACCENT_ENABLE_GRADIENT = 1,
|
||||
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
|
||||
ACCENT_ENABLE_BLURBEHIND = 3, // Traditional DWM blur
|
||||
ACCENT_ENABLE_ACRYLICBLURBEHIND = 4, // RS4 1803
|
||||
ACCENT_ENABLE_HOST_BACKDROP = 5, // RS5 1809
|
||||
ACCENT_INVALID_STATE = 6 // Using this value will remove the window background
|
||||
};
|
||||
|
||||
enum ACCENT_FLAG {
|
||||
ACCENT_NONE = 0,
|
||||
ACCENT_ENABLE_ACRYLIC = 1,
|
||||
ACCENT_ENABLE_ACRYLIC_WITH_LUMINOSITY = 482
|
||||
};
|
||||
|
||||
struct ACCENT_POLICY {
|
||||
DWORD dwAccentState;
|
||||
DWORD dwAccentFlags;
|
||||
DWORD dwGradientColor; // #AABBGGRR
|
||||
DWORD dwAnimationId;
|
||||
};
|
||||
using PACCENT_POLICY = ACCENT_POLICY *;
|
||||
struct WINDOWCOMPOSITIONATTRIBDATA {
|
||||
WINDOWCOMPOSITIONATTRIB Attrib;
|
||||
PVOID pvData;
|
||||
SIZE_T cbData;
|
||||
};
|
||||
using PWINDOWCOMPOSITIONATTRIBDATA = WINDOWCOMPOSITIONATTRIBDATA *;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
||||
using QT_NATIVE_EVENT_RESULT_TYPE = qintptr;
|
||||
using QT_ENTER_EVENT_TYPE = QEnterEvent;
|
||||
@ -23,6 +99,9 @@ class FluFrameless : public QQuickItem, QAbstractNativeEventFilter {
|
||||
Q_PROPERTY_AUTO(bool, topmost)
|
||||
Q_PROPERTY_AUTO(bool, disabled)
|
||||
Q_PROPERTY_AUTO(bool, fixSize)
|
||||
Q_PROPERTY_AUTO(QString, effect)
|
||||
Q_PROPERTY_READONLY_AUTO(bool, effective)
|
||||
Q_PROPERTY_READONLY_AUTO(QStringList, availableEffects)
|
||||
QML_NAMED_ELEMENT(FluFrameless)
|
||||
public:
|
||||
explicit FluFrameless(QQuickItem *parent = nullptr);
|
||||
@ -75,4 +154,5 @@ private:
|
||||
quint64 _clickTimer = 0;
|
||||
bool _isWindows11OrGreater = false;
|
||||
QList<QPointer<QQuickItem>> _hitTestList;
|
||||
QString _currentEffect;
|
||||
};
|
||||
|
@ -13,6 +13,11 @@ Window {
|
||||
property bool fixSize: false
|
||||
property Component loadingItem: com_loading
|
||||
property bool fitsAppBarWindows: false
|
||||
property var tintOpacity: FluTheme.dark ? 0.80 : 0.75
|
||||
property int blurRadius: 60
|
||||
property alias effect: frameless.effect
|
||||
readonly property alias effective: frameless.effective
|
||||
readonly property var availableEffects: frameless.availableEffects
|
||||
property Item appBar: FluAppBar {
|
||||
title: window.title
|
||||
height: 30
|
||||
@ -24,6 +29,15 @@ Window {
|
||||
icon: window.windowIcon
|
||||
}
|
||||
property color backgroundColor: {
|
||||
if(frameless.effective && active){
|
||||
var backcolor
|
||||
if(frameless.effect==="dwm-blur"){
|
||||
backcolor = FluTools.withOpacity(FluTheme.windowActiveBackgroundColor, window.tintOpacity)
|
||||
}else{
|
||||
backcolor = "transparent"
|
||||
}
|
||||
return backcolor
|
||||
}
|
||||
if(active){
|
||||
return FluTheme.windowActiveBackgroundColor
|
||||
}
|
||||
@ -107,6 +121,11 @@ Window {
|
||||
Component.onDestruction: {
|
||||
frameless.onDestruction()
|
||||
}
|
||||
onEffectiveChanged: {
|
||||
if(effective){
|
||||
FluTheme.blurBehindWindowEnabled = false
|
||||
}
|
||||
}
|
||||
}
|
||||
Component{
|
||||
id:com_background
|
||||
@ -162,8 +181,8 @@ Window {
|
||||
FluAcrylic{
|
||||
anchors.fill: parent
|
||||
target: img_back
|
||||
tintOpacity: FluTheme.dark ? 0.80 : 0.75
|
||||
blurRadius: 64
|
||||
tintOpacity: window.tintOpacity
|
||||
blurRadius: window.blurRadius
|
||||
visible: window.active && FluTheme.blurBehindWindowEnabled
|
||||
tintColor: FluTheme.dark ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1)
|
||||
targetRect: Qt.rect(window.x-window.screen.virtualX,window.y-window.screen.virtualY,window.width,window.height)
|
||||
|
@ -150,6 +150,9 @@ Module {
|
||||
Property { name: "topmost"; type: "bool" }
|
||||
Property { name: "disabled"; type: "bool" }
|
||||
Property { name: "fixSize"; type: "bool" }
|
||||
Property { name: "effect"; type: "string" }
|
||||
Property { name: "effective"; type: "bool" }
|
||||
Property {name: "availableEffects"; type: "QVariant"}
|
||||
Method { name: "showFullScreen" }
|
||||
Method { name: "showMaximized" }
|
||||
Method { name: "showMinimized" }
|
||||
@ -396,6 +399,7 @@ Module {
|
||||
Property { name: "nativeText"; type: "bool" }
|
||||
Property { name: "animationEnabled"; type: "bool" }
|
||||
Property { name: "blurBehindWindowEnabled"; type: "bool" }
|
||||
Property { name: "micaBackgroundColor"; type: "QColor" }
|
||||
}
|
||||
Component {
|
||||
name: "FluThemeType"
|
||||
@ -4150,6 +4154,12 @@ Module {
|
||||
Property { name: "autoVisible"; type: "bool" }
|
||||
Property { name: "autoCenter"; type: "bool" }
|
||||
Property { name: "autoDestroy"; type: "bool" }
|
||||
|
||||
Property { name: "effect"; type: "string" }
|
||||
Property { name: "effective"; type: "bool" }
|
||||
Property { name: "blurRadius"; type: "int" }
|
||||
Property { name: "tintOpacity"; type: "QVariant" }
|
||||
|
||||
Property { name: "useSystemAppBar"; type: "bool" }
|
||||
Property { name: "resizeBorderColor"; type: "QColor" }
|
||||
Property { name: "resizeBorderWidth"; type: "int" }
|
||||
|
Reference in New Issue
Block a user