Skip to content

Latest commit

 

History

History
102 lines (71 loc) · 3.75 KB

QWidget.md

File metadata and controls

102 lines (71 loc) · 3.75 KB

QWidget

  • 关于 QWidget 的背景颜色和背景图片的设置

    • 首先设置autoFillBackground 属性为真

    • 然后定义一个QPalette 对象

    • 设置QPalette 对象的背景属性(颜色或图片)

    • 最后设置QWidget 对象的Palette

    • 实例:

        QWidget *widget = new QWidget;
        widget->setAutoFillBackground(true);
        QPalette palette;
        palette.setColor(QPalette::Background, QColor(192,253,123));
        //palette.setBrush(QPalette::Background, QBrush(QPixmap(":/background.png")));
        widget>setPalette(palette);
      
  • 怎样把标题栏去掉

      window.setWindowFlags( Qt::FramelessWindowHint); //即可
      setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); //可前端显示
    
  • 设置 QWidget 不可最大化

      this -> setFixedSize( 480 , 800 );
    
  • 设置窗体透明

      this.setWindowOpacity(0.5);
    
  • 隐藏 qt 程序的任务栏条

      mainwindow.setWindowFlags( Qt::Tool | Qt::StaysOnTopHint ); //保持在最前面可选
    
  • 窗体实现

    • 一. 背景刷成黑色, 前景色设为白色。

      • 方法1、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);
        
      • 方法2、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); 
          //另外一种方法
          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 ); 
          }
        
    • 五. 控制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);
      
    • 六. layout 的边界

        layout->setMargin (0);
      
  • 鼠标移入事件

      virtual void enterEvent ( QEvent * event )