• 9602阅读
  • 21回复

[提问]setMark设置不规则窗口出现异常,求助!! [复制链接]

上一主题 下一主题
离线bboyfeiyu
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-16
关键词: phonon播放器
   本人弄一个播放,将videoWidget放在QWidget上,然后用setMark实现不规则窗体,由于本人对setMark不熟悉,导致当进入全屏模式再退出的时候出现遮罩的异常,进入全屏的时候videoWidget会成为顶级控件,应该与这个特性有关。求前辈们指教


void videoWidget::paintEvent(QPaintEvent *)
{
  QPainter paint(this);
    paint.setRenderHints(QPainter::Antialiasing|QPainter::HighQualityAntialiasing);
    QPixmap videoPixmap(":/images/video.png");    
    QPixmap pix;    pix.load(":/images/video.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);  
    resize(pix.size());  
    setMask(QBitmap(pix.mask()));    
   paint.drawPixmap(0,0,videoPixmap);
}


原始界面



全屏后再退出:










求前辈指点。


离线jorneyr

只看该作者 1楼 发表于: 2011-10-17
不规则窗口不要用setMask,会有锯齿,用下面的这个方法可以实现反锯齿的不规则窗口:http://www.cppblog.com/biao/archive/2011/10/12/158175.html
离线bboyfeiyu

只看该作者 2楼 发表于: 2011-10-17
回 1楼(jorneyr) 的帖子
第一次用遮罩,确实很多锯齿。我首先用的是透明背景,不过视频窗口不显示,后面才用遮罩。再试试吧。谢了
离线jdwx

只看该作者 3楼 发表于: 2011-10-17
回 2楼(bboyfeiyu) 的帖子
看第二张图,估计问题在显示视频的窗口没有缩放。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线bboyfeiyu

只看该作者 4楼 发表于: 2011-10-17
回 3楼(jdwx) 的帖子
是的,进入全屏和退出全屏我都没有进行特别的设置,怎么实现呢?resizeEvent 吗?
离线bboyfeiyu

只看该作者 5楼 发表于: 2011-10-17
回 3楼(jdwx) 的帖子
用drawPixmap来贴不规则差窗体背景的话,退出全屏模式后整个窗口都变成了videoWidget,不知道该怎么解决。
离线bboyfeiyu

只看该作者 6楼 发表于: 2011-10-17
回 3楼(jdwx) 的帖子
还有就是如果用了透明窗口属性,那么videoWidget图像就显示不出来,videowidget那个区域直接成了透明。
离线jdwx

只看该作者 7楼 发表于: 2011-10-17
回 6楼(bboyfeiyu) 的帖子
不知道你的程序的videoWidget和主窗口的关系?
还有主窗口有没有普通窗口的鼠标拖动调整大小的功能?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线bboyfeiyu

只看该作者 8楼 发表于: 2011-10-17
回 7楼(jdwx) 的帖子
videoWidgei是主窗口的子控件,我是用绝对坐标固定在主窗口上。并没有鼠标调整大小的功能。
离线bboyfeiyu

只看该作者 9楼 发表于: 2011-10-17
回 7楼(jdwx) 的帖子
如果你来做你用啥方法呢?就是主窗口为不规则窗体,可以实现全屏切换。
离线jdwx

只看该作者 10楼 发表于: 2011-10-17
回 9楼(bboyfeiyu) 的帖子
用布局来解决问题,根据主窗口是否全屏,调整布局
void    setContentsMargins ( int left, int top, int right, int bottom )
用这个函数调整布局的四边距离(正常尺寸的时候),在全屏的时候全部设置成0
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 11楼 发表于: 2011-10-17
我发现在resizeEvent里,在窗口第一次显示的时候,不能得到正确的窗口大小,
还是布局比较好用。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线bboyfeiyu

只看该作者 12楼 发表于: 2011-10-17
回 3楼(jdwx) 的帖子
videowidget = new Phonon::VideoWidget(this);     // 声明videowidget

然后设置透明属性的话videoWidget显示不出来图像
  w.setWindowFlags(Qt::FramelessWindowHint);
   w.setAttribute(Qt::WA_TranslucentBackground);
我是在paintEvent里用drawPixmap绘制不规则窗口的,进入和退出全屏没有进行其他的设置,希望前辈帮解决下,谢谢

  
离线luckyyoung

只看该作者 13楼 发表于: 2011-10-17
回 6楼(bboyfeiyu) 的帖子
如果videoWidgei是主窗口的子控件,那么当主窗口设为透明时,这个属性也会对videoWidgei生效,所以也透明了。
Anything is possible!
离线jdwx

只看该作者 14楼 发表于: 2011-10-17
回 12楼(bboyfeiyu) 的帖子
一个关于窗口操作的例子,看看有没有用。
附件: mask.rar (127 K) 下载次数:20
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线bboyfeiyu

只看该作者 15楼 发表于: 2011-10-18
回 13楼(luckyyoung) 的帖子
那么如何解决呢?
离线bboyfeiyu

只看该作者 16楼 发表于: 2011-10-18
回 14楼(jdwx) 的帖子
非常感谢JDWX
离线luckyyoung

只看该作者 17楼 发表于: 2011-10-18
回 15楼(bboyfeiyu) 的帖子
我原来也碰到过,没找到好方法。。。今天通过你的帖子学到了,呵呵
Anything is possible!
离线bboyfeiyu

只看该作者 18楼 发表于: 2011-10-18
回 17楼(luckyyoung) 的帖子
你也搞了视频播放器 ?搞定没有啊 ?我这几天没有弄这个,你弄好了给我一份撒。能正常显示就好,其余功能我有
离线luckyyoung

只看该作者 19楼 发表于: 2011-11-22
回 18楼(bboyfeiyu) 的帖子
我搞的不是视频播放器,呵呵。。。后来索性把主窗口设置透明,于是所有控件都半透明了~~~
Anything is possible!
离线luckyyoung

只看该作者 20楼 发表于: 2011-11-22
回 18楼(bboyfeiyu) 的帖子
14楼的例子不是ok了吗?
Anything is possible!
离线mkndg

只看该作者 21楼 发表于: 2015-12-31
同样的问题,设置styleSheet感觉不太好。
快速回复
限100 字节
 
上一个 下一个