【发布时间】: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