QT widget设置半透明的问题

sno_guo 2012-05-14 11:21:08
大家好,我按照别的程序做了一个小闹钟。 现在想把他的背景颜色设置为半透明色,可是看了很久,也没有设置从成功。
源代码如下,大家帮我看看是怎么回事,谢谢了!!! (注释部分是我不停的测试用的)

#include "widget.h"
#include <QTime>
#include <QTimer>
#include <QMouseEvent>

DIgiClock::DIgiClock(QWidget *parent) :
QLCDNumber(parent)
{
resize(250,60);

QPalette p=palette(); //调色板
p.setColor(QPalette::Window,Qt::blue);
p.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(p);

setWindowFlags(Qt::FramelessWindowHint);//去掉边框。
setNumDigits(8);//设置
// setWindowOpacity(0.7);
// setAttribute(Qt::WA_TranslucentBackground, true);
//setAttribute(Qt::WA_TranslucentBackground);

QTimer *timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(ShowTime()));
timer->start(500);
ShowTime();

showColon=true;//只是滴答滴答跳到。就是不停取反。
}

void DIgiClock::ShowTime()
{
QTime time=QTime::currentTime();
QString text=time.toString("hh:mm:ss");
if(showColon)
{
text[2]=':'; //因为hh:mm:ss text[2] =':'
text[5]=':';
showColon=false;
}
else
{
text[2]=' ';
text[5]=' ';
showColon=true;
}
display(text);
}

void DIgiClock::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
dragPosition=event->globalPos()-frameGeometry().topLeft(); //新位置
event->accept();//子类要了这个事件,如果子类不要,传送到基类
}
else if(event->button()==Qt::RightButton)
{
close();
}
}
void DIgiClock::mouseMoveEvent(QMouseEvent *event)
{
move(event->globalPos()-dragPosition);//两个类也可以相减
event->accept();
}
...全文
2341 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zimmermanleo 2014-10-23
  • 打赏
  • 举报
回复
setWindowOpacity()中的值是0.0-1.0,0.0是彻底透明,1.0是完全不透明
庐州李大爷 2014-07-07
  • 打赏
  • 举报
回复
解决了没,我的问题和你是一样的,setWindowOpacity()设置无效啊。我设置透明度,然后用qdebug输出透明度,setWindowOpacity设置的数值没有任何改变,求教求教
Dalin_大林 2014-07-03
  • 打赏
  • 举报
回复
引用 4 楼 sno_guo 的回复:
我现在写一个最简单的程序,请问下应该如何更改,谢谢! #include <QtGui/QApplication> #include "widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.setWindowOpacity(1); //这样是没有透明效果的,不知道为什么???? w.show(); return a.exec(); }
w.setWindowOpacity(1);这个1是代表不透明 小于1大于0的代表是透明的!0.1-0.9
加菲猫好胖啊 2013-04-26
  • 打赏
  • 举报
回复
引用 4 楼 sno_guo 的回复:
我现在写一个最简单的程序,请问下应该如何更改,谢谢! #include <QtGui/QApplication> #include "widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.setWindowOpacity(1); //这样是没有透明效果的,不知道为什么???? w.show(); return a.exec(); }
w.setWindowOpacity(1); 你不查查此函数的文档就敢传1进去? 1是完全不透明,0是完全透明 透明度是从0.0-1.0渐渐不透明的
sno_guo 2012-05-19
  • 打赏
  • 举报
回复
哦,刚解决这个问题, 需要在ubuntu下,在桌面右击 更改桌面背景,然后选择视觉效果,改成“正常” ,这样才可以在QT中使用setWindowOpacity()函数。

谢谢各位了
sno_guo 2012-05-18
  • 打赏
  • 举报
回复
自己顶一下,请问下 谁有在ubuntu下实现的 窗口透明的吗,谢谢了
sno_guo 2012-05-17
  • 打赏
  • 举报
回复
谢谢各位的热情回复,谢谢!
可是好像在ubuntu 10.04LTS版本的系统中,不是这样的:
QT 的mannal 是这样说的:

This feature is available on Embedded Linux, Mac OS X, Windows, and X11 platforms that support the Composite extension.



Note that under X11 you need to have a composite manager running, and the X11 specific _NET_WM_WINDOW_OPACITY atom needs to be supported by the window manager you are using.

说 需要一个 composite manager ,就是说我的ubuntu需要支持 Composite extension,请问下这个是如何才能让ubuntu支持这个,谢谢!
jdwx 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 4 楼 的回复:

我现在写一个最简单的程序,请问下应该如何更改,谢谢!

#include <QtGui/QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;

w.setWindowOpacity(1……
[/Quote]
1 = 不透明,0 = 全透明
roywillow 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我现在写一个最简单的程序,请问下应该如何更改,谢谢!

#include <QtGui/QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;

w.setWindowOpacity(1……
[/Quote]
我怎么记得……setWindowOpacity的参数如果是1的话就是完全不透明呢……?
sno_guo 2012-05-16
  • 打赏
  • 举报
回复
哦,谢谢了,我怎么说一直设置了,总是没有用,呵呵
那么请问下,我怎样设置compositor 扩展呢,
zhaigch 2012-05-15
  • 打赏
  • 举报
回复
setWindowOpacity 这个函数 在X11平台上需要composite扩展才能工作。在XP MAC平台直接支持。下午看书的时候看到这了!182页,精通QT编程第二版。
sno_guo 2012-05-15
  • 打赏
  • 举报
回复
我现在写一个最简单的程序,请问下应该如何更改,谢谢!

#include <QtGui/QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;

w.setWindowOpacity(1); //这样是没有透明效果的,不知道为什么????

w.show();
return a.exec();
}
sno_guo 2012-05-15
  • 打赏
  • 举报
回复
谢谢回复,我就是按照他那样做的,可惜我这边就是不行。
请问下,我上面的程序应该屏蔽掉那些,哪些需要留下的,谢谢!
cpio 2012-05-15
  • 打赏
  • 举报
回复
setWindowOpacity是可以的呀,注释掉了

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧