如何使用样式表设置QTabWidget的背景透明

问题描述 投票:0回答:1

我在主机中设置了一张图片作为背景,并在上面添加了两个小部件:一个

QTableWidget
和一个
QTabWidget

我已经通过

tablewidget
stylesheet
的背景设置为透明 在 vs2013 中。表格背景显示的是我设置的图片,但是
horizontalheader
部分还是白色的:

TaskInfWidget_->setStyleSheet("QTableWidget{background:transparent;}\
                           QTableWidget::item{border-top:1px solid grey;border-bottom:none;border-right:none;border-left:none;}\
                           QHeaderView::section{background:transparent;color:black; font-family:宋体;font-size:15px;font-weight:200;\
                                                    border:none;}");

但是当我在

tablewidget
中添加
tabwidget
并设置
stylesheet
tabwidget
时,它不起作用:

QTabWidget *tab_widget=new QTabWidget;
QTableWidget *table = new QTableWidget(10, 1);
tab_widget->addtab(table,"hahaha");

tab_widget>setStyleSheet("QTabWidget::pane{background:transparent}\
            QTabBar::tab{background-color:transparent;height:30px;}\
            QTabBar::tab:selected{background-color:rgb(55,112,183)}\
            QTabBar::tab:hover{color:rgb(235,97,0);}");
table->setStyleSheet("QTableWidget{background:transparent;\
                         border:3px solid rgb(30,77,135);\
                         selection-background-color:rgb(30,77,135);}");

我设置了

QTabWidget::pane{background:transparent}
QTableWidget{background:transparent}
,但是
tablewidget
的背景还是白色,不是主机的图片

qt background stylesheet transparent
1个回答
0
投票

这里有两个最小的样式表,仅演示实现背景透明度所需的内容。

对于标题视图项,将此样式表应用于 QTableWidget:

QHeaderView
{
    background: transparent;
}
QHeaderView::section
{
    background:transparent;
    border:none;
}

对于 QTabWidget 内的 QTableWidget,请在 QTabWidget 上应用此样式表:

QTabWidget::pane { 
    border: 1px solid white;
    /*or*/
    border: none;
}

QTabBar::tab {
    border: 1px solid white;
    /*or*/
    border: none;
}

QTableWidget 上的样式表:

QTableWidget
{
    background: transparent;
}

QHeaderView
{
    background: transparent;
    border: 1px solid white;
    /*or just remove the border, but it needs to be done explicitly*/
    border: none;
}

QHeaderView::section
{
    background:transparent;
    border: 1px solid white;
    /*or just remove the border, but it needs to be done explicitly*/
    border: none;
}

您可以在此基础上继续发展,如果失去透明度,则后退一步。

如果由于某种原因这确实使背景透明,请检查父窗口小部件的样式表是否导致冲突,尤其是

background
border

注意:这是使用Fusion风格进行测试的,它可能不适用于其他风格。

© www.soinside.com 2019 - 2024. All rights reserved.