Qt 5,QML 2.0和透明无边框窗口不兼容

时间:2014-03-14 17:55:59

标签: c++ qt qml transparent qtstylesheets

任务:

  1. 圆角窗口
  2. 自定义边框
  3. QWidget中的QML

    1. 因为无法在父窗口小部件中更改边框样式,所以我制作了两个边框样式。第一个父窗口小部件是透明的,它是在QSS中设置的。第二个是带有圆角的那个,也是用QSS设置的。附:我想这不是最明智的想法。差远了。 为了使它工作,我设置了Qt :: WA_TranslucentBackground属性。

    2. 设置Qt :: FramelessWindowHint窗口标志。

    3. QML 2.0风格。[在下面的代码中]
    4. 问题是:

      当WA_TranslucentBackground和FramelessWindowHint打开时 - 没有QML

      当FramelessWindowHint打开时 - 仅QML视图

      当WA_TranslucentBackground或两者都关闭时 - 仍然是系统BORDERS

      我也尝试在MainWindow上设置掩码

      QPixmap pixmap = QWidget::grab(this->rect());
      this->setMask(pixmap.createMaskFromColor(Qt::transparent, Qt::MaskInColor));
      

      效果很好,没有系统边框,自定义的四边形和QML工作,但整个其他区域变白,不知道如何修复。

      主窗口:

      QFile styleFile("style.qss");
      styleFile.open(QFile::ReadOnly), qApp->setStyleSheet(QLatin1String(styleFile.readAll()));
      
      QWidget *container = QWidget::createWindowContainer(new QQuickView(QUrl("main.qml")), this);
      ui->verticalLayout->addWidget(container);
      
      //this->setAttribute(Qt::WA_TranslucentBackground, true);
      //this->setWindowFlags(Qt::FramelessWindowHint | Qt::Window);
      QPixmap pixmap = QWidget::grab(this->rect());
      this->setMask(pixmap.createMaskFromColor(Qt::transparent, Qt::MaskInColor));
      

      样式:

      QWidget#MainWindow{
      background:transparent;
      }
      
      QWidget#MainWindowRounded{
      background-color: grey;
      border: 1px solid black;    
      border-radius: 5px;
      }
      

      这可以解决吗?

      HERE SOURCE CODE

0 个答案:

没有答案