QT笔记之实现阴影窗口

方法一:

代码实现

重写void paintEvent(QPaintEvent *event);

void QT_Test::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);
    }
}

方法二:

用代用阴影的背景图片实现

QT的窗口对于一般的窗口程序来说,已经完全够用了。但有时候我们要求界面比较精美,或者还想自定义皮肤之类的话,就需要自己定义窗口。这里介绍一种简单的自定义窗口的方法。

自定义样式可以达到很多的自定义皮肤的效果,但自定义样式有时不能指定窗口的形状,或者实现窗口的阴影效果(使用QT的QGraphicsEffect定义阴影,但运行效率较低)。这样的话可以重载窗口的paintEvent函数实现自绘制窗口。

先准备一张有窗口阴影的背景图,然后在paintEvent函数里面使用QPainterx绘制这张图。

这里将窗口类命名为GraphicDialog

示例代码如下:

class GraphicDialog :
public QDialog
{
public:
GraphicDialog(QWidget* parent = NULL, Qt::WindowFlags f = 0/* Qt::FramelessWindowHint*/);
~GraphicDialog(void);
protected:
void paintEvent(QPaintEvent *);
QPixmap background;
};

在窗口类构造函数中:

setWindowFlags(Qt::FramelessWindowHint); //无标题窗口
setAttribute(Qt::WA_TranslucentBackground);

background.load(":/Images/DialogBackground");
在paintEvent中

QPainter p(this);
p.drawPixmap(0, 0, rect().width(), rect().height(), background);

实现效果如图:

转载:http://twyok.blog.163.com/blog/static/812293032013215506418/

时间: 2024-10-30 20:59:53

QT笔记之实现阴影窗口的相关文章

【Qt学习笔记】9.容器窗口

容器(Container) Qt里提供多种容器窗口: 1.选项卡窗口 QTabWidget 2.堆叠窗口  QStackedWidget 3.工具窗口  QToolBox 一.选项卡窗口 容纳多个子窗口,每个子窗口显示一个标签(选项卡).当标签被点击时,此窗口置于最前. 实现方式: 1.使用Qt Designer 2.手动添加 Widget 二.堆叠窗口 容纳多个Widget,每个Wdiget称为一页 没有标签,由其他窗口控制 通常可以做向导程序 显示第几页: setCurrectIndex()

【Qt学习笔记】10.主窗口 The Main Window

一.工具栏和菜单 只有主框架窗口(QMainWindow)才能够添加菜单和工具栏 QAction 命令 步骤: 1.添加action (动作编辑器) (在Qt Designer 界面的右下角)) 2.把action拖动到菜单或工具栏里 3.在代码里加上响应处理函数 示例代码: Test10_1a_12_11::Test10_1a_12_11(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); assert( connect( ui

QT添加程序图标及窗口图标

程序图标 材料准备 图标文件:*.ico文件,存放在源文件同一目录下,如"myapp.ico" 写入图标 向*.pro文件中,独立一行写入"RC_ICONS = *.ico",如RC_ICONS = "myapp.ico" 生成程序 运行程序,即可在程序目录下看到带有图标的软件 PS:还有一种使用rc文件的方法,有一篇博文写的挺详尽的了,此处不再累赘,可参考Qt笔记——三步设置Qt应用程序图标. 更多程序图标添加方式,可在帮助中输入"S

C++windows内核编程笔记day09_day10,对话框和窗口基本控件等的使用

//设置字体颜色 SetTextColor(hdc,RGB(255,0,0)); //窗口背景 //wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); //wce.hbrBackground=CreateSolidBrush(RGB(0,0,255)); //设置字体背景 SetBkColor(hdc,RGB(0,0,200)); //设置字体背景模式 SetBkMode(hdc,TRANSPARENT);//字体背景透明 //创建字体,成功返回字体,失败返回

Qt无边框,可移动窗口

QPoint dragPosition;void MainWindow::mousePressEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){dragPosition=event->globalPos()-frameGeometry().topLeft();event->accept();}}void MainWindow::mouseMoveEvent(QMouseEvent *event){if(event-

qt如何实现一个渐隐窗口呢(开启的时候他是从上往下渐渐显示)

qt如何实现一个渐隐窗口呢?就是比如说开启的时候他是从上往下渐渐显示的,关闭的时候从下往上渐渐小时的http://stackoverflow.com/questions/19087822/how-to-make-qt-widgets-fade-in-or-fade-out Fade In Your Widget // w is your widget QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this); w->setGra

QT笔记:数据库总结(一)

QT笔记:数据库总结(一)http://blog.csdn.net/reborntercel/article/details/6991147 http://www.devbean.net/2013/06/qt-study-road-2-sql-model/

qt实现类似QQ伸缩窗口--鼠标事件应用

上一章节讲了qt鼠标事件实现,获取鼠标参数的方法.这一讲主要讲怎么应用上讲的鼠标事件实现一个小功能. qq好友对话框右侧 未展开时如图: 鼠标移动到 “隐藏侧边”处单击可以隐藏侧边,隐藏后效果如图: 实现的范例效果如下 1.一般情况 2.鼠标移动到中间分割线中间区域时,效果 3.单击红色按钮后,效果 4.鼠标移动到边界,效果 下面讲解实现过程:一般情况在QT中,这种伸缩窗体的实现有两种方法:一种是是直接用QSplitter分割器实现:另一种直接用布局管理器自己实现.本节用的是第二种方法实现的.布

VC++界面编程之--阴影窗口的实现详解

转载:http://blog.csdn.net/rmxming/article/details/11661365 对于我们这些控件狂来说,窗口阴影也是一个必不可少的实现需求.虽说其没多大用,但对于增加窗口立体感来说,那是挺有帮助的. 我实现了一个类似于360界面的阴影效果,其可以支持正常窗口,也支持半透明窗口. 阴影窗口对于正常窗口和半透明窗口,有区别么?且让我慢慢写来:) 阴影窗口的实现原理,简单来讲:就是在主窗口创建时,创建一个子窗口,吸附于主窗口的底部.然后在子窗口上做一个带半透明阴影效果