首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >透明QWidget/QScrollArea背景样式设置没有影响

透明QWidget/QScrollArea背景样式设置没有影响
EN

Stack Overflow用户
提问于 2011-01-28 07:46:14
回答 4查看 21.9K关注 0票数 19

这个问题与

  • http://www.qtcentre.org/threads/18151-QScrollArea-misbehaving-background-style
  • http://www.qtforum.org/article/34443/cannot-change-background-color-of-a-qscrollarea-with-setstylesheet.html

我之所以这么问,是因为我相信SO社区可能有办法解决这个问题。

因此,我喜欢将ScrollArea的背景色设置为透明或自定义背景图像,因为它将包含一些横幅。我已经在Qt (Designer)中运行了它!:-):

但是,当将应用程序部署到模拟器上时,它将不能工作,它将保持灰色、深灰色:

这是我的布局树:

下面是我使用的样式表(附加&设置为MainWindow):

代码语言:javascript
运行
复制
QMainWindow {
    background: transparent url(:/ui/designs/images_from_android/bg_plain_empty.png) top left;
}
QWidget#centralWidget {
    background-color: transparent;
}
QPushButton {
    color: red;
    border: 1px solid green;
}
QFrame#top_header {
    background: transparent url(:/ui/designs/images_from_android/bg_title_bar_landscape.png) top left repeat-x;
}
QWidget#top_banner_scroll1,
QWidget#top_banner_scroll2 {
    background: transparent url(:/ui/designs/images_from_android/stripe_bg.png) top left repeat-x;
}

这真是令人费解。当Qt设计师向我展示正确的设计时..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-08 09:15:05

你能试试scrollArea.setStyleSheet("background-color:transparent;");吗?它对我有用。

票数 3
EN

Stack Overflow用户

发布于 2013-05-10 12:48:36

使用样式表

代码语言:javascript
运行
复制
QScrollArea { background: transparent; }
QScrollArea > QWidget > QWidget { background: transparent; }
QScrollArea > QWidget > QScrollBar { background: palette(base); }

要理解这一点,可以使用类似但简化的布局:

代码语言:javascript
运行
复制
scrollarea            QScrollArea
  + scrollareaContent QWidget
      + label         QLabel

有趣的是,有两个具有非透明背景的小部件。第一个是scrollarea本身(用样式表的第一行变得透明)。

另一个(我没想到的)是scrollareaContent,它使用第二行进行处理。在那里,第一个QWidget是不能直接访问的QScrollArea的私有视图。另一个是scrollareaContent。这种方法应该在不影响任何其他小部件的情况下使所有QScrollAreas透明。

更新:我在样式表中添加了第三行,防止滚动条变得透明,因为它们也是QScrollArea以下的两个级别的QWidgets。

票数 24
EN

Stack Overflow用户

发布于 2014-03-14 11:09:59

使用以下样式表,我能够使滚动区透明,同时保持滚动条的默认背景色:

代码语言:javascript
运行
复制
scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}");
scrollAreaContents.setStyleSheet("background-color:transparent;");
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4825976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档