• 10979阅读
  • 5回复

[提问]请教模态对话框贴半透明背景图的问题 [复制链接]

上一主题 下一主题
离线shiziyang
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-24
我搞了一张有阴影的背景图打算作为对话框背景图,将该图用setMask来设置蒙版,并在paintevent里直接画上去。


可是如果调用show来显示的时候可以正常显示,而一旦用了open或setModal(true)或exec来模态显示它的话,半透明的部分就不起作用了,只有全透明(alpha = 0)的地方可透,其余全不透明,请问大家有碰到这个问题吗?求解。


Qt::WA_TranslucentBackground和Qt::FramelessWindowHint已设置。

qt版本为4.7.0.
离线uidab

只看该作者 1楼 发表于: 2013-01-24
回 楼主(shiziyang) 的帖子
尝试过QSS设置背景图吗?
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线shiziyang

只看该作者 2楼 发表于: 2013-01-24
回 1楼(uidab) 的帖子
使用qss在也是这样,由于使用了WA_TranslucentBackground属性,模态的情况下背景透明处就是黑漆漆一片

基本情况就像这样
#include "dialog.h"
Dialog::Dialog(QWidget *parent)    : QDialog(parent)
{
    resize(500, 500);
    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
    m_pbtnShow = new QPushButton(this);
    m_pbtnShow->setGeometry(20, 20, 100, 30);
    m_pbtnShow->setText("Show");
    m_pdlgTest = new QDialog(this);
    m_pdlgTest->setAttribute(Qt::WA_TranslucentBackground);
   m_pdlgTest->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
   m_pdlgTest->resize(300, 300);
    QPushButton * pbtnTemp = new QPushButton(m_pdlgTest);
    pbtnTemp->setGeometry(50, 50, 100, 30);
    m_pdlgTest->setStyleSheet("QDialog{background-color: transparent;}");
   connect(m_pbtnShow, SIGNAL(clicked()), this, SLOT(onbtnClickShowDialog()));
}
Dialog::~Dialog()
{
}
void Dialog::onbtnClickShowDialog()
{
    m_pdlgTest->exec();
}

离线uidab

只看该作者 3楼 发表于: 2013-01-24
回 2楼(shiziyang) 的帖子
我是让你直接用QSS加载图片,不是设置背景颜色。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线shiziyang

只看该作者 4楼 发表于: 2013-01-24
回 3楼(uidab) 的帖子
将qss改成如下
    m_pdlgTest->setStyleSheet("QDialog{border-image: url(./bgwidget_bg.png);background:transparent;}");


show时如下




exec时如下






不过如果不设置framelesshint时却是好的,可以透明过去
离线shiziyang

只看该作者 5楼 发表于: 2013-01-25
我现在用的是4.7.0 for mac,而且是carbon库的,刚试了下cocoa库的4.7.4和4.8.1是好的,郁闷,看来是版本低的问题,不升级不行了。
快速回复
限100 字节
 
上一个 下一个