使用TranslucentBackground标志滚动时,Qt QScrollArea剩余的图形工件

时间:2019-07-15 15:39:56

标签: c++ qt

当滚动不是单独窗口的qscrollarea时,会出现图形伪影,并且滚动区域和目标小部件的TranslucentBackground标志都设置为true。当滚动区域作为单独的窗口打开,且父级为空或Qt :: Window标志时,不会发生此问题。

  • 此行为是预期的还是错误?
  • 如果是错误,是 您知道有什么解决办法吗?

我尝试了许多其他的窗口标志,但是所有未打开单独窗口的标志都有相同的问题。

#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>
#include <QScrollArea>
#include <QScrollerProperties>
#include <QScroller>
#include <QTouchDevice>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *mainWindow = new QWidget;

    QHBoxLayout *buttonsLayout = new QHBoxLayout;
    QWidget *buttonsWidget = new QWidget();
    buttonsWidget->setLayout(buttonsLayout);
    buttonsWidget->setAttribute(Qt::WA_TranslucentBackground);
    buttonsWidget->setAttribute(Qt::WA_NoSystemBackground);
    for(int i = 0; i < 10; ++i) {
        QPushButton *button = new QPushButton("Button " + QString::number(i), buttonsWidget);
        buttonsLayout->addWidget(button);

    }
    QScrollArea *scrollArea = new QScrollArea(mainWindow);
    scrollArea->setAttribute(Qt::WA_TranslucentBackground);
    scrollArea->setAttribute(Qt::WA_NoSystemBackground);
    scrollArea->setWidgetResizable(true);
    scrollArea->setFixedHeight(100);
    scrollArea->setWidget(buttonsWidget);
    scrollArea->setWindowFlag(Qt::WindowStaysOnTopHint);

    mainWindow->show();
    scrollArea->show();

    return a.exec();
}

使用Qt5.12.1开源版本ubuntu 16.04编译时的示例工件。

enter image description here

0 个答案:

没有答案