• QWidget背景(透明)问题


    一. 背景設定為成黑色,前景色設為白色。 方法一、paltette方式,經測試,該方法不會影響到其他控制元件,建議使用 QPalette bgpal = palette();
    bgpal.setColor (QPalette::Background, QColor (0, 0 , 0, 255));
    //bgpal.setColor (QPalette::Background, Qt::transparent);
    bgpal.setColor (QPalette::Foreground, QColor (255,255,255,255)); setPalette (bgpal);
    方法二、stylesheet方式 影響子控制元件的方法是:
    setStyleSheet ("background-color: rgb(0,0,0);color: rgb(255,255,255);");
    不影響子控制元件的方法是:
    setStyleSheet ("venus--TitleBar {background-color: rgb(0,0,0);color: rgb(255,255,255);}");
    二. 圓角控制元件 用stylesheet方式
    setStyleSheet ("border:2px groove gray;border-radius:10px;padding:2px 4px;");
    三. 圓角視窗 RoundRectWin::RoundRectWin() { QPalette p = palette(); QPixmap img("roundrect.png");
    QBitmap mask("roundrect_mask.png");
    p.setBrush(QPalette::Window, QBrush(img));
    setPalette(p);
    setMask(mask);
    resize(img.size());
    //setWindowFlags(Qt::FramelessWindowHint);//這句會去掉標題列 } 注意:mask的圖片多餘部分設為白色
    四. 半透通視窗
    1.視窗整體透通,但是窗體上的控制元件不透通。 透過設定窗體的背景色來實現,將背景色設定為全透。 QPalette pal = palette();
    pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); setPalette(pal); 試驗效果:
    窗體標題列不透通;
    窗體使用者區域的控制元件不透通,QLabel控制元件只是按字檢視,控制元件背景色透通; 窗體使用者區域完全透通。
    另外從網路上看到的方法: setAttribute(Qt::WA_TranslucentBackground, true); 試驗的結果是類似於上面的方法,但有時候窗體會被一些雜色斑點填補,未找到原因。
    2.視窗及其上面的控制元件都半透通:
    setWindowOpacity(0.7)
    試驗效果:視窗及控制元件都半透通。注意無法夠setWindowFlags(Qt::FramelessWindowHint);要不就不起作用
    3.視窗整體不透通,局部透通:
    在Paint事件中使用Clear型態繪圖。
    void TestWindow::paintEvent( QPaintEvent* )
    { QPainter p(this);
    p.setCompositionMode( QPainter::CompositionMode_Clear ); p.fillRect( 10, 10, 300, 300, Qt::SolidPattern ); }
    試驗效果:繪制區域全透通。如果繪制區域有控制元件不會影響控制元件。
    以上實驗均是基于Directfb的Qte測試。在Linux下及Windows下效果會略有不同。 比如在Windows下第3個實驗,繪制區域就是一個黑窟窿,如果Window本身半透,則是Window下面的內容加上半透效果,不是全透通效果。
    五. 控制QPixmap的alpha
    QPixmap temp(pixmapTop.size()); temp.fill(Qt::transparent);
    QPainter p(&temp);
    p.setCompositionMode(QPainter::CompositionMode_Source);
    p.drawPixmap(0, 0, pixmapTop);
    p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
    p.fillRect(temp.rect(), QColor(0, 0, 0, alpha)); //--lable檢視前景圖片 ui->label->setScaledContents(true);
    ui->label->setPixmap(temp);

  • 相关阅读:
    (转)viso 形状搜索 无法使用 的解决办法
    Visio 2003 直线需要相交时的设置方法
    C# Serialport执行close()方法时,程序卡死的解决办法
    RabbitMQ核心技术总结
    kafka核心原理总结
    hadoop的价值在哪里
    从程序员小仙飞升上神,java技术开发要如何实现?
    明年大数据行业的趋势会是哪些?
    2016年末程序员应该知道的基本架构思想
    2016年末程序员突破自我的绝密方法分享
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/3596638.html
Copyright © 2020-2023  润新知