qt qdockwidget 透明问题记录

QT 使用QSS 设置透明效果时,当QDocketWidget  为docked状态时透明效果是生效的 

QSS设置为:

QMainWindow {

background-color:rgb(255,0,0)

}

QMainWindow>QWidget{

background-color:rgba(0,255,0,0)

}

QDockWidget{

background-color:rgba(125,0,0,0)

}

QDockWidget>QWidget{

background-color:rgba(125,0,0,0)

}

QTreeWidget{

background-color:rgba(125,0,0,0)

}

但是当窗户float出来时,会有黑色背景

解决办法:

给QDockWidget 设置自定义头  

同时设置QDockWidget窗口属性:

WA_TranslucentBackground
WA_NoSystemBackground

mytitle为自定义的一个窗口

最终效果如图

左边未设置的QDockWidget  右边为我们想要的效果:

但是发现弹出的窗口虽然透明了但是 鼠标穿透导致 透明窗口无法执行操作

解决办法:设置QSS 透明不要设置未完全透明

改为:

QMainWindow {

background-color:rgb(255,0,0)

}

QMainWindow>QWidget{

background-color:rgba(0,255,0,30)

}

QDockWidget{

background-color:rgba(125,0,0,60)

}

QDockWidget>QWidget{

background-color:rgba(125,0,0,60)

}

QTreeWidget{

background-color:rgba(125,0,0,60)

}

此时效果为:

此时已经达到我们想要的效果我们

但是当我们2个窗口 设置为float后  两个窗口的效果都是透明的,但是合并在一起后发现透明效果消失了:

将2个QDockWidget都设置为自定义头

将2个窗户合并后发现还是无法透明:

原因是弹出的窗口合并后会有一个QDockWidgetGroupWindow类窗口管理,因此我们需要设置QDockWidgetGroupWindow的窗口属性,

解决办法:

添加event事件

效果如下:

但是当我们当我们的QMainWindow设置为GroupedDrading时候 ,在2个QDockWidget都为docked状态时合并,同时拖出来后发现窗户还是不透明

拖拽后

具体原因不清楚:

临时解决办法:

将所有子窗口都设置透明属性,虽然能达到效果,但是这样会影响其他子窗口,效果如下

待解决BUG:

当QDockWidget使用自定义头时,存在崩溃,具体描述如下:当我们将窗户合并后拖拽出来,如下图

同时双击 title 将两个QDockWidget 都浮动出来  同时拖动 QDockWidget 会出现一个黑色窗口,

Qt中的QDockWidget是一个浮动窗口,可以在主窗口中显示。你可以使用以下方法创建和配置QDockWidget: 1. 创建QDockWidget对象:使用QDockWidget的构造函数创建一个QDockWidget对象,可以设置标题和父对象。例如:QDockWidget *dockWidget = new QDockWidget("浮动", this); 2. 添加到主窗口:使用addDockWidget()函数将QDockWidget添加到主窗口的指定区域。例如:addDockWidget(Qt::BottomDockWidgetArea, dockWidget);这将使浮动窗口显示在主窗口的底部。 3. 设置停靠区域:使用setAllowedAreas()函数设置QDockWidget的允许停靠区域,可以限制它只能在指定的上下左右位置停靠。例如:dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);这将限制浮动窗口只能在顶部和底部停靠。 关于工具栏,你可以使用QToolBar来创建和配置工具栏: 1. 创建QToolBar对象:使用QToolBar的构造函数创建一个QToolBar对象,并将其添加到主窗口。例如:QToolBar *toolbar = new QToolBar(this); addToolBar(toolbar);默认情况下,工具栏将显示在上方,但你可以使用addToolBar()函数的第一个参数设置它在想要的地方显示。例如:addToolBar(Qt::LeftToolBarArea, toolbar);这将将工具栏显示在左侧。 2. 设置停靠区域:使用setAllowedAreas()函数设置工具栏允许停靠的区域。例如:toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);这将限制工具栏只能在左侧和右侧停靠。 3. 添加操作和分隔符:使用addAction()函数向工具栏添加操作,使用addSeparator()函数添加分隔符。例如:toolbar->addAction(newAction); toolbar->addSeparator(); toolbar->addAction(openAction);这将向工具栏添加新的操作和一个分隔符。 4. 添加自定义控件:使用addWidget()函数将自定义控件添加到工具栏。例如:QPushButton *btn = new QPushButton("aa", this); toolbar->addWidget(btn);这将在工具栏中添加一个按钮。 综上所述,QDockWidget是一个浮动窗口,可以多个,而工具栏是可以有多个,并且可以设置停靠区域和添加操作或自定义控件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Qt学习(2)菜单栏和工具栏等](https://blog.csdn.net/bareheadedman/article/details/104361888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值