QWidget move()和QGraphicsOpacityEffect导致黑色边框

时间:2018-05-25 01:32:15

标签: c++ qt

这花了我一段时间才弄明白...但每当我尝试使用QWidget的move()(或甚至是setGeometry)函数时,它会将子QWidgit分配给QGraphicsOpacityEffect,它会导致QWidgit变黑沿着右侧和底部的边界。

边框正好是我移动的像素数量的大小。如果我增加移动小部件的数量,边框也会增加......

如果我删除move()调用,问题就解决了......如果我在setOpacity()调用中使用0.99而不是1.0,那就解决了问题......

这是问题的图片...... https://i.imgur.com/LLI62Fu.png

有谁知道如何避免/修复此问题??

这是我的代码。

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>560</width>
    <height>351</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QWidget" name="TestHolder2" native="true">
    <property name="geometry">
     <rect>
      <x>200</x>
      <y>90</y>
      <width>120</width>
      <height>80</height>
     </rect>
    </property>
   </widget>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

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


    ui->TestHolder2->resize(450, 250);
    ui->TestHolder2->move(11, 11);
    ui->TestHolder2->setStyleSheet("background-color: black;");

    QWidget* new_widget = new QWidget(ui->TestHolder2);
    new_widget->setStyleSheet("background-color:red;");
    new_widget->resize(450, 250);

    QGraphicsOpacityEffect* opacity_effect = new QGraphicsOpacityEffect(new_widget);
    new_widget->setGraphicsEffect(opacity_effect);
    opacity_effect->setOpacity(1);

}

MainWindow::~MainWindow()
{
    delete ui;
}

的main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

0 个答案:

没有答案