• 5367阅读
  • 10回复

[讨论]为什么我写的不规则窗口还是有窗口边框(有图) [复制链接]

上一主题 下一主题
离线kikyous
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-01



是因为是linux的原因吗?




离线jdwx

只看该作者 1楼 发表于: 2011-10-01
回 楼主(kikyous) 的帖子
是标题栏还在?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kikyous

只看该作者 2楼 发表于: 2011-10-01

就是外面一个框框,看起来好像图片浏览器一样

怎么办




离线jdwx

只看该作者 3楼 发表于: 2011-10-01
回 2楼(kikyous) 的帖子
把那个部分到代码贴上来,大家分析分析。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kikyous

只看该作者 4楼 发表于: 2011-10-01
class ShapeWidget(QWidget):  
    def __init__(self,parent=None):  
        super(ShapeWidget,self).__init__(parent)  

        pix=QPixmap("win.png","0",Qt.AvoidDither|Qt.ThresholdDither|Qt.ThresholdAlphaDither)  
        self.resize(pix.size())  
        self.setMask(pix.mask())  
        self.dragPosition=None  

    def mousePressEvent(self,event):  
        if event.button()==Qt.LeftButton:  
            self.dragPosition=event.globalPos()-self.frameGeometry().topLeft()  
            event.accept()  
        if event.button()==Qt.RightButton:  
            self.close()  

    def mouseMoveEvent(self,event):  
        if event.buttons() & Qt.LeftButton:  
            self.move(event.globalPos()-self.dragPosition)  
            event.accept()  

    def paintEvent(self,event):  
        painter=QPainter(self)  
        painter.drawPixmap(0,0,QPixmap("win.png"))  

app=QApplication(sys.argv)  
form=ShapeWidget()  
form.show()  
app.exec_()  



python代码,因该很容易懂的

离线jdwx

只看该作者 5楼 发表于: 2011-10-01
回 4楼(kikyous) 的帖子
关键在win.png
setmask用的图片要求黑白两色,白色的部分会被切除掉,黑色的保留。
可以考虑自己绘制一个mask图片


用图片提取mask非常费时间。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 6楼 发表于: 2011-10-01
在构造函数里添加:setWindowFlags(Qt::FramelessWindowHint);去掉表题栏

void Widget::resizeEvent(QResizeEvent *)
{
    QPixmap pixmap(size());
    pixmap.fill();
    QPainter p(&pixmap);
    p.setBrush(QBrush(QColor(0,0,0)));
    p.drawRoundedRect(rect(),10,10);
    setMask(QBitmap(pixmap));
}
经测试上面到代码在ubuntu里面可以做圆角窗口


我的是C++代码,不是python.
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 7楼 发表于: 2011-10-01
ubuntu那里不让贴图,晕。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kikyous

只看该作者 8楼 发表于: 2011-10-01
回 6楼(jdwx) 的帖子
感谢啦,确实可以用了
离线roywillow

只看该作者 9楼 发表于: 2011-10-01
应该是没有Qt::FramelessWindowHint的原因
半透明的png其实也能用,只不过只有全部透明的地方才会被认为是穿透的,半透明的地方仍然属于窗口的一部分
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线luoyes

只看该作者 10楼 发表于: 2011-10-08
mark一下
快速回复
限100 字节
 
上一个 下一个