0
点赞
收藏
分享

微信扫一扫

64 界面外观(窗口无边框,不规则窗体,透明窗体)

 

 

 

窗口标志设置函数(Qt :: WindowFlags)

窗口标志是一个类型(例如Qt :: Dialog)和零个或多个提示窗口系统(hints)(例如Qt :: FramelessWindowHint)的组合。 标志Qt :: WindowFlags(具体标志讲解见帮助文档Qt :: WindowFlags)

推荐好网站:http://doc.qt.io/archives/qt-5.5/

利用浏览器翻译插件,帮助快速学习

不规则窗体

Qt中提供了部件遮罩(mask)来实现不规则窗体。例如: 先在构造函数中添加如下代码:

QPixmap pix; 
pix.load(":/image/yafeilinux.png"); // 加载图片
resize(pix.size()); // 设置窗口大小为图片大小
setMask(pix.mask()); // 为窗口设置遮罩

然后在paintEvent()函数中将图片绘制在窗口上:

void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
// 从窗口左上角开始绘制图片
painter.drawPixmap(0,0,QPixmap(":/image/yafeilinux.png"));
}

透明窗体

利用样式表设置部件的透明度,QPushButton { background 一color,rgba(255, 255, 255, 100) },但这种方式不能用于顶层窗口 setWindowOpacity(double X)设置窗口的透明度,整个应用程序全部透明,

  • 该属性保持窗口的不透明度。
  • 不透明度的有效范围是从1.0(完全不透明)到0.0(完全透明)。
  • 默认情况下,这个属性的值是1.0。

setWindowFlags(Qt,  FramelessWindowHint)和setAttribute( Qt: : WA_TranslucentBackground) 组合使用,实现窗体背景透明,部件不透明。

方式一:使用setWindowOpacity()函数。例如: 构造函数里添加一行代码:

setWindowOpacity(0.3);

使用setWindowOpacity()函数就可以实现窗口的透明效果,它的参数取值范围为0.0-1.0,当取值为0.0时完全透明,取值为1.0时完全不透明。

方式二:使用setAttribute()函数。例如: 在构造函数中下面两行代码:

setWindowFlags(Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground);

这里使用了setAttribute()函数指定窗口的Qt::WA_TranslucentBackground属性,它可以使窗体背景透明,而其中的部件不受影响。不过在Windows下,还要使用setWindowFlags()函数指定Qt::FramelessWindowHint标志,这样才能实现透明效果。

方式三:在方式二的基础上修改重绘事件。例如: 进行paintEvent()函数的定义:

void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.fillRect(rect(),QColor(255,255,255,100));
}

这里先使用rect()函数获取窗口的内部矩形,它不包含任何边框。然后使用半透明的白色对这个矩形进行填充。

 

 

举报

相关推荐

0 条评论