Мне нужен QTreeWidget с прозрачным фоном, поэтому он имеет тот же цвет, что и родной светло-серый фон окна. Это прекрасно работает, установив прозрачный фон.
Проблема в том, что если я сделаю это, свиток станет не родным. Фон QTreeWidget по умолчанию «белый», и если я не изменю его, полоса прокрутки будет выглядеть как родная. Однако, если я изменю фон на «прозрачный», полоса прокрутки теряет свой родной вид.
Чтобы продемонстрировать это, я поместил два QTreeWidget рядом друг с другом, один с белым фоном по умолчанию, показывающим собственную полосу прокрутки, и один с фоном, измененным на прозрачный, показывающий не собственную полосу прокрутки: Скриншот
Вот код:
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;}");
Других решений пока нет …