从子小部件中删除 QGraphicsEffect [重复]
Posted
技术标签:
【中文标题】从子小部件中删除 QGraphicsEffect [重复]【英文标题】:Remove QGraphicsEffect from child widget [duplicate] 【发布时间】: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" 正在以罪恶的形式制作动画,这还没有完成。我必须添加一个按钮并为文字或星星评分...。然后点击按钮返回主菜单或重新开始游戏
【参考方案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("QDialogbackground-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("QLabelcolor: red; font: 20pt bold; background-color: #00baff;");
pop_up->layout()->addWidget(transparentLabel);
pop_up->show();
【讨论】:
以上是关于从子小部件中删除 QGraphicsEffect [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt 中将 QGraphicsEffect 添加到 QAbstractItemView?
如何在 Qt 中创建一个基本的自定义 QGraphicsEffect?
如何最好地从子小部件访问嵌套小部件的 BuildContext?