背景更改时带有非本机滚动条的 QTreeWidget

QTreeWidget with non-native scroll bar when background changed

我需要一个具有透明背景的 QTreeWidget,以便它与原生浅灰色 window 背景具有相同的颜色。通过将背景设置为透明可以很好地工作。

问题是,如果我这样做,滚动将变得非本地外观。 QTreeWidget 的默认背景是 "white" ,如果我不更改它,滚动条看起来确实是原生的。但是,如果我将背景更改为 "transparent",滚动条将失去其原始外观。

为了演示这一点,我将两个 QTreeWidgets 并排放置,一个默认的白色背景显示本机滚动条,另一个背景更改为透明,显示非本机滚动条:screenshot

代码如下:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QHBoxLayout* layout = new QHBoxLayout(this);
    ui->centralWidget->setLayout(layout);

    QTreeWidget* tree1 = new QTreeWidget();
    QTreeWidget* tree2 = new QTreeWidget();
    layout->addWidget(tree1);
    layout->addWidget(tree2);

    // add ten items to each tree widget
    for(int i=0; i<10; i++){
        QString item_text = "item " + QString::number(i);

        QTreeWidgetItem* item1 = new QTreeWidgetItem();
        item1->setText(0, item_text);
        tree1->addTopLevelItem(item1);

        QTreeWidgetItem* item2 = new QTreeWidgetItem();
        item2->setText(0, item_text);
        tree2->addTopLevelItem(item2);
    }

    // change the background color of tree2 to the window color
    //   this leads to a non native scroll bar for tree2
    tree2->setStyleSheet("background-color: transparent;");
}

如何在透明背景下保持原生滚动条?

我终于找到了解决办法。我需要将背景颜色的定义限制为 QTreeWidget:

tree2->setStyleSheet("QTreeWidget {background-color: transparent;}");