【问题标题】:Remove QGraphicsEffect from child widget [duplicate]从子小部件中删除 QGraphicsEffect [重复]
【发布时间】:2016-03-11 07:14:27
【问题描述】:

我正在使用 QGraphics 框架制作游戏。

当游戏结束时,我想模糊整个图形视图并显示一个顶部带有一些文本的小部件。

我的简化代码是:

在视图中:

void GraphicsTraxView::showGameResultWidget(bool res)
{
    blurEffect_->setEnabled(true);
    WigglyWidget *wigglyWidget = new WigglyWidget(this);
    if(res)
      wigglyWidget->setText("you win");
    else 
      wigglyWidget->setText("you loose");

    wigglyWidget->resize(150,150);
    wigglyWidget->move(QPoint(
        getScreenSize().width() / 2 -75, getScreenSize().height() / 2-75));
    wigglyWidget->show();
}

在文本小部件中:

void WigglyWidget::paintEvent(QPaintEvent * /* event */)
{
    QColor backgroundColor = palette().light().color();
    backgroundColor.setAlpha(220);
    QPainter customPainter(this);
    customPainter.fillRect(rect(), backgroundColor);
   //...

但是正如您在下面的图片中看到的,文字也变得模糊且无法阅读。

如何从子小部件中删除 graphicsEffect 并仍然保持小部件的背景颜色半透明?

【问题讨论】:

  • 必须是子部件吗?为什么不能使用WigglyWidget *wigglyWidget = new WigglyWidget;?只需确保销毁小部件即可。
  • @thuga 有 3 个原因: 1_ 如果它不是子小部件,那么让它半透明是行不通的! 2_显示它使一部分视图不模糊 3_单击视图小部件将其隐藏
  • @thuga 查看结果:i.stack.imgur.com/wQL3O.png
  • you loose 显示后会发生什么?顺便说一句,应该是你输了:)
  • @thuga "you lost text" 正在以罪恶的形式制作动画,这还没有完成。我必须添加一个按钮并为文字或星星评分...。然后点击按钮返回主菜单或重新开始游戏

标签: c++ qt qwidget qgraphicsview


【解决方案1】:

您可以将您的WigglyWidget 嵌入到对话框中,或者使自己成为一个对话框。

然后您可以通过使用setWindowOpacity 设置窗口不透明度来使其透明。

如果您将WigglyWidget 嵌入到对话框中,则必须将Qt::WA_TranslucentBackground 属性设置为对话框以使背景透明。

然后您必须为其设置Qt::FramelessWindowHint | Qt::Dialog 标志以摆脱标题栏。

这是一个例子:

QDialog *pop_up = new QDialog(this);
pop_up->resize(200, 200);
pop_up->setAttribute(Qt::WA_TranslucentBackground); 
pop_up->setWindowOpacity(0.5);
pop_up->setStyleSheet("QDialog{background-color: transparent;}");
pop_up->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
pop_up->setLayout(new QVBoxLayout);

QLabel *transparentLabel = new QLabel("TRANSPARENT");
transparentLabel->setAlignment(Qt::AlignCenter);
transparentLabel->setStyleSheet("QLabel{color: red; font: 20pt bold; background-color: #00baff;}");
pop_up->layout()->addWidget(transparentLabel);
pop_up->show();

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多