494816491

494816491

0个粉丝

7

问答

4

专栏

0

资料

494816491  发布于  2015-06-25 09:31:45
采纳率 0%
7个问答
10573

3520d 移植qt5.4问题

 
    我把qt5.4搞到了海思3520d上(基于linuxfb插件),想通过qt来做个gui,写了一点透明的程序在ubuntu上跑是透明的,但是拿到板子上跑透明的地方就是黑色的(fb设置成ARGB8888),通过cat /dev/fb0,发现所有的ALPHA位都是FF,在网上搜了好几种类似的方法:
1.this->setAttribute(Qt::WA_TranslucentBackground, true);

2.QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);

3.QPainter p(this);
p.setCompositionMode( QPainter::CompositionMode_Clear );
p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );

都没有解决问题。
之后在网上找到:
在嵌入式平台,我们使用的QT会是以QWS方式运行,即会先运行QWSServer,再运行实际的窗体,在该情况下,默认QWS背景会是绿色的,而在嵌入式上,很多方案都会将video和graphic层分开,两层的层叠也是可调的,当需要在video上面做一些控制图标等,此时就需要将gfx调到vid之上,此时就需要将运行于gfx的qt程序设置背景透明,共需要设置两处:一处是QWS,一处是窗体。只要设置QWSServer::setBackground(QColor(0,0,0,0));就好了。
感觉应该和我的问题差不多,但是QT5已经抛弃了QWS,取而代之的是QPA?

20150625,找到解决透明的的方法了,qt的源码中qfbscreen.cpp,中mCompositePainter->fillRect(rect, Qt::black);,这个将背景设置成了黑色,但是又出现一个问题鼠标有残影。
我来回答
回答14个
时间排序
认可量排序

david

39个粉丝

368

问答

253

专栏

229

资料

david 2015-06-25 09:47:48
认可0
搞不太懂,为啥用这么高版本QT?

494816491

0个粉丝

7

问答

4

专栏

0

资料

494816491 2015-06-25 10:41:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=17465&ptid=7956]david 发表于 2015-6-25 09:47[/url]
搞不太懂,为啥用这么高版本QT?[/quote]

确实想换成低版本的了,这个5.4问题有点多

jp1017

0个粉丝

78

问答

0

专栏

9

资料

jp1017 2015-06-25 16:09:18
认可0
学习先,你很棒,再接再厉!!!:handshake


:D:D:D:D:D:D

494816491

0个粉丝

7

问答

4

专栏

0

资料

494816491 2015-06-26 09:51:06
认可0
鼠标好了:

1.在qlinuxfbscreen.cpp中将
mBlitter->drawImage(rects, *mScreenImage, rects);
更改为
mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
mBlitter->drawImage(rects, *mScreenImage, rects);
mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);

2.在qfbscreen.cpp中将
mCompositePainter->fillRect(rect, Qt::black);
更改为
mCompositePainter->setCompositionMode(QPainter::CompositionMode_Source);
mCompositePainter->fillRect(rect, Qt::transparent);
mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);

eric.zhc

0个粉丝

0

问答

0

专栏

0

资料

eric.zhc 2015-06-26 14:30:48
认可0
QT5.4 可以裁减到多大?

494816491

0个粉丝

7

问答

4

专栏

0

资料

494816491 2015-06-26 16:48:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=17512&ptid=7956]eric.zhc 发表于 2015-6-26 14:30[/url]
QT5.4 可以裁减到多大?[/quote]

这个还没有试过,听说12m

cs_sos

0个粉丝

9

问答

2

专栏

5

资料

cs_sos 2015-06-26 17:05:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=17515&ptid=7956]494816491 发表于 2015-6-26 16:48[/url]
这个还没有试过,听说12m[/quote]

这么大啊。 太占空间了。

ymir

2个粉丝

23

问答

0

专栏

8

资料

ymir 2015-07-09 10:09:39
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=17465&ptid=7956]david 发表于 2015-6-25 09:47[/url]
搞不太懂,为啥用这么高版本QT?[/quote]

david,有没有qt库相关裁剪的帖子可以参考?之前看你评论说qt库可以裁剪到8M左右,我按照某些论坛上的配置参数配置后,qt库编译出来都特别的大,只是QTgui就二十多M、

lihp1603

0个粉丝

4

问答

0

专栏

1

资料

lihp1603 2016-01-13 09:38:46
认可0
问一下,我目前使用qt5.3.1的源码使用hisiv200的交叉编译工具进行编译,但编译的过程中报错,出现ft2builid.h找不到,但实际这个头文件是存在的:

applepen

0个粉丝

11

问答

0

专栏

11

资料

applepen 2017-01-10 11:53:32
认可0
本帖最后由 applepen 于 2020-3-27 22:29 编辑

海思HI3520D 一般用的版本是QT4.8.6   

快乐之人

0个粉丝

12

问答

0

专栏

1

资料

快乐之人 2017-01-13 16:44:51
认可0
搞QT不用用那么高版本的,会有问题的

史前小虫

0个粉丝

7

问答

0

专栏

0

资料

史前小虫 2017-02-23 01:06:38
认可0
修改了这个还要怎么设置才能透明吗?修改了还是没办法透明。。

leniux

0个粉丝

0

问答

0

专栏

0

资料

leniux 2017-08-18 13:23:21
认可0
本帖最后由 leniux 于 2017-8-18 15:27 编辑

qt5.4.1 linuxfb方式,fb=RGBA32,背景透过效果:
qtbase/src/platformsupport/fbconvenience/qfbscreen.cpp
239                     mCompositePainter->setCompositionMode(QPainter::CompositionMode_Clear);
240                     mCompositePainter->fillRect(rect, Qt::transparent);
241                     mCompositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver);

qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
440         mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
441         mBlitter->drawImage(rects, *mScreenImage, rects);
442         mBlitter->setCompositionMode(QPainter::CompositionMode_SourceOver);


使用qwidget,并做如下设置,背景将透明(同PC效果):
#if 1
    //t3 ok
    QPalette bgpal = palette();
    bgpal.setColor (QPalette::Background, QColor (0, 0, 0, 0));
    bgpal.setColor (QPalette::Foreground, QColor (0, 0, 0, 255));
    setPalette (bgpal);
#endif

******注意:以上这个设置在pc上是黑色的背景。

pc需要做如下设置(pc上上面t3的设置可以忽略):
#if 1
    //pc ok
    this->setAttribute( Qt::WA_TranslucentBackground,true );
    this->setWindowFlags( Qt::FramelessWindowHint );
#endif

jd_kelvin

0个粉丝

0

问答

0

专栏

0

资料

jd_kelvin 2017-04-21 22:16:56
认可0
谢谢分享。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区