Qt窗口的阴影边框

将窗口设置为透明(setAttribute(Qt::WA_TranslucentBackground);)

然后重载paintEvent:

void MyWidget::paintEvent(QPaintEvent *event)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(10, 10, this->width() - 20, this->height() - 20);

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.fillPath(path, QBrush(Qt::white));

QColor color(0, 0, 0, 50);
for (int i = 0; i < 10; i++)
{
QPainterPath path;
path.setFillRule(Qt::WindingFill);
path.addRect(10 - i, 10 - i, this->width() - (10 - i) * 2, this->height() - (10 - i) * 2);
color.setAlpha(150 - qSqrt(i) * 50);
painter.setPen(color);
painter.drawPath(path);
}
}

时间: 2024-10-17 11:53:40

Qt窗口的阴影边框的相关文章

Qt之圆角阴影边框

Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求. 这里是有一些门道的,尤其是,这里藏着一个很大的秘密. 这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG... https://bugreports.qt-project.org/browse/QTBUG-17548 ok,看完这个BUG的应急解决办法,然后你再需加上如下代码例子,就可见效了 void MainWindow::paintEvent(QPaintEvent *event){    QPainterPath

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

Qt之阴影边框(转)

原文地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101eoc7.html 阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知道box-shadow,它就是来设定阴影效果的,那么Qt呢?看过一些资料,说是QSS是基于CSS2的,既然如此,box-shadow是基于CSS3的!那么Qt定然就用不了! 搜了一些资料,每张图片都做成阴影效果的固然不可能,直接舍弃(即使可以,也不采纳).如果实时的去画图,效率太低,最后选择了拼图的

QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里是 KWindowSystem::setState(winId(), NET::KeepAbove)这样的置顶窗口不会处于全屏窗口的上方,如果需要真正的置顶,setWindowFlags(Qt::X11BypassWindowManagerHint) 可无视这个规则,但这样不会出现任务栏等,kimt

Qt 无标题无边框程序的拖动和改变大小

2013-7-9阅读5435 评论16 最近做项目遇到的问题,总结下. 有时候我们觉得系统的标题栏和按钮太丑太呆板,想做自己的标题栏以及最大化.最小化.关闭,菜单按钮,我们就需要 setWindowFlags(Qt::FramelessWindowHint); 但是这样过后,我们就不能拖动窗口改变位置,以及拖动边缘改变窗口大小了. 有两种方案处理这种情况: 1.自己对mouseMoveEvent,mousePressEvent,mouseReleaseEvent 等事件进行处理. 2.Qt可以处

深度探索QT窗口系统(五篇)

窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打开windows时,桌面就是一个窗口,你打开浏览器时,你也正在访问窗口...好了,回到今天的话题,QT窗口系统,QT是一个跨平台的框架,类似微软的MFC,Borland的OWL,前者只适用于windows,而使用QT你可以开发windows平台应用程序,你也可以开发linux应用程序,当然了你也可以

QML之窗口(无边框、透明及拖拽)

1.无边框 Qt Quick 2.0 中 QQuickView代替了1.0中的QDeclarativeView. 无边框窗口代码如下: QQuickView viwer; //QQuickView继承自QWindow而不是QWidget viwer.setFlags(Qt::FramelessWindowHint); 2.窗口透明 setOpacity可设置整个窗口(包括控件)的透明度,而背景透明则应使用setColor //设置窗口颜色,以下为透明,在viwer.setSource()之前使用

Qt窗口部件及子部件

QWidget类是所有用户界面对象的基类,被称为基础窗口部件. #include <QApplication> #include<QLabel> #include<QWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 新建QWidget类对象,默认parent参数是0,所以它是个窗口 QWidget *widget = new QWidget(); // 设置窗口标题 wid

Qt窗口及控件-窗口Close()自动释放

在进行一个四窗口项目,当第四个窗口显示结果后,若重新开始则close()结果页面后new第一个窗口 发现不断的重新开始会导致内存占用越来越多 Qt窗口在Close()指令后调用CloseEven(),最后判断是否关闭 若关闭,则Hide()窗口,并不是真正的释放内存.若不关闭则不作任何操作 此时给窗口增加如下设置: setAttribute(Qt::WA_DeleteOnClose); 可实现窗口在Close()后自动释放内存