背景更改时带有非本机滚动条的 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;}");
我需要一个具有透明背景的 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;}");