Qt删除框架?

Posted

技术标签:

【中文标题】Qt删除框架?【英文标题】:Qt removing the frame? 【发布时间】:2016-12-09 07:33:30 【问题描述】:

有没有一种有效的方法可以在 Qt 中移除框架并将背景颜色设置为透明?我想做的另一件事是让窗口也可以“移动”,例如每当我按住鼠标左键时,我都可以随意移动窗口。

以图形方式表达我想要达到的结果。

---------

使其“可移动”的解决方案:https://forum.qt.io/topic/34354/solved-frameless-window-dragging-issue/2

【问题讨论】:

【参考方案1】:

首先您必须设置窗口标志(我在重载的 QDialog::exec 中执行此操作):

setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);

(只需将 Qt::FramelessWindowHint 添加到您的窗口标志中)

然后你添加透明背景:

setAttribute(Qt::WA_TranslucentBackground);

...并确保未设置 autoFillBackground(如果选中,请在 Designer 中取消选中)

如果您需要添加阴影,只需将 DropShadowEffect 添加到创建背景圆角矩形的小部件:

auto dropShadow = new QGraphicsDropShadowEffect;
dropShadow->setOffset(0);
dropShadow->setBlurRadius(40);
dropShadow->setColor(QColor(0, 0, 0, 180));
ui.backgroundWidget->setGraphicsEffect(dropShadow);

阴影是在小部件本身上绘制的,因此您需要在背景小部件周围留出额外的空间。 IE。如果您的 BlurRadius 设置为 40,您应该设置 40 像素的边距:

layout()->setMargin(40);

【讨论】:

哇,太棒了!如上所述如何使其“可移动”有什么想法吗? 不知道有没有简单的方法让它“可移动”。我会覆盖mouseDownEvent、mouseUpEvent 和mouseMoveEvent。使用 mouseDownEvent 存储相对于小部件和父小部件的鼠标位置,并在 mouseMoveEvent 中设置小部件位置,以便存储的小部件相对位置最终低于当前父小部件相对鼠标位置。 我认为这是一个值得讨论的问题。 我想出了如何让它可以移动,有兴趣的可以看看这里:forum.qt.io/topic/34354/solved-frameless-window-dragging-issue/…

以上是关于Qt删除框架?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 简易画板

QT 5.5.1 删除了 -universal 选项:无法在 MAC 上创建通用二进制文件

删除 Qt 中的填充

unity二维动画框架和qt比如何

Qt 状态机框架学习(没学会)

QT开发(三十九)——GraphicsView框架