• 13006阅读
  • 17回复

qt graphics view 设透明求救。。。 [复制链接]

上一主题 下一主题
离线gujing105
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-12
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
小弟在做qt的时候, 需要在透明的graphics scene中放入graphics pixmap item.
做法是设置了graphics view 为透明。
但是发现graphics pixmap item也随着变透明了。
请问哪位大侠知道 这个怎么处理?
离线water_wf

只看该作者 1楼 发表于: 2010-04-13
setFlags(QGraphicsItem::ItemIgnoresParentOpacity);
基本上默认是相乘的opacity,可以自己设置
离线gujing105
只看该作者 2楼 发表于: 2010-04-13
真是太太太太感谢了。 我先试试看,然后汇报效果哈。
离线gujing105
只看该作者 3楼 发表于: 2010-04-13
试过 好像没有什么效果。
分析原因 可能是 ItemIgnoresParentOpacity这个标志位表示 item的透明度和 他父窗口的 透明度不相关。
但是我的item 是通过scene.additem()放入到graphics scene中的。
而我设置的透明度是graphics view的。所以没有效果。
不知道我分析的对不对,请高手指教, 如何解决这个问题。
离线water_wf

只看该作者 4楼 发表于: 2010-04-13
我一会帮你看看
离线gujing105
只看该作者 5楼 发表于: 2010-04-13

太感动了 大侠。。。。
离线water_wf

只看该作者 6楼 发表于: 2010-04-13
仔细看了一下,这个parent是item parent,不是主窗体。另外你是如何让scene透明的
是不是可以用CSS来做呢?
比如 background-color: rgba( 255, 255, 255, 50% );
离线gujing105
只看该作者 7楼 发表于: 2010-04-13
恩 太感谢了。我试试看
离线gujing105
只看该作者 8楼 发表于: 2010-04-13
貌似还是不行  艾。悲剧
离线water_wf

只看该作者 9楼 发表于: 2010-04-13
另外你是如何让scene透明的?????
setWindowOpacity()???这个函数好像只能在top window中调用,并且会使得所有的菜单栏,标题栏等等透明
离线gujing105
只看该作者 10楼 发表于: 2010-04-13
恩 ,开始就是用了view->setWindowOpacity(0.5)。 发现全部透明的。
后来用scene->setBackgroundBrush(QBrush(QColor(255, 0, 0, 0)));, 发现没有效果,不能透。
后来用了scene->setProperty("opacity", 0.5);同样不能透。
再后来就是用了
    QPalette *palette = new QPalette(QColor(255, 0, 0, 0));
   scene->setPalette(palette);    仍然没有透明。
呵呵  请教怎么设置scene的透明度才是正确的?谢谢
离线water_wf

只看该作者 11楼 发表于: 2010-04-14
请问你要的是透明到主窗口还是透明到桌面呢?
我的理解是应该透明到桌面吧,即使QGraphicsView 作为主窗口
离线water_wf

只看该作者 12楼 发表于: 2010-04-14
给你写了个例子,在qt4.6.1下通过,看看是不是你要的
#include <QtGui>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;

QGraphicsScene* scene = new QGraphicsScene(&window);
QGraphicsItem* item = scene->addText("QGraphicsTextItem");
item->setFlags(QGraphicsItem::ItemIsMovable);

QGraphicsView* view = new QGraphicsView(&window);
view->setStyleSheet("background: transparent");
view->setScene(scene);
window.setAttribute(Qt::WA_TranslucentBackground);
window.setWindowFlags( Qt::FramelessWindowHint) ;
window.setCentralWidget(view);
window.setStyleSheet("background: green");
window.show();
return app.exec();
}
测试过了,好像frameless这个参数必须加上才行
离线gujing105
只看该作者 13楼 发表于: 2010-04-14

大侠   经你指点 终于成功拉。。。
膜拜
哈哈 感激涕零哇
离线uihjk999
只看该作者 14楼 发表于: 2011-01-04
实在是太感谢啦!
今日一直纠结于这个问题,
赶快试一下先.....
离线uihjk999
只看该作者 15楼 发表于: 2011-01-04

|||O|R|Z|||   测试通过了!
再次感谢大牛的分享!!
小弟乃菜鸟中的战斗鸟
离线oscarboycn

只看该作者 16楼 发表于: 2011-05-09
马上试试
http://www.21ic.com
http://bbs.eetop.cn
http://www.eetop.cn/
http://www.eet-china.com/
http://www.netyi.net/
http://www.pcbbbs.com/
http://www.pcbtech.net/
离线wangweiqi23
只看该作者 17楼 发表于: 2011-07-21
热心的大牛啊 小弟谢过了  顶一个
快速回复
限100 字节
 
上一个 下一个