QMenu,contextmenuevent,窗体透明

void  MainWindow::contextMenuEvent(QContextMenuEvent  *event)
{
QMenu  *menu=newQMenu;
menu->addAction(tr("设置"),this,SLOT(setSlot()));
menu->addSeparator();
menu->addAction(tr("退出"),this,SLOT(close()));
menu->exec(event->globalPos());
}

setWindowFlags(Qt::FramelessWindowHint|Qt::Tool|Qt::WindowStaysOnTopHint);

1、设置窗体的背景色
在构造函数里添加代码,需要添加头文件qpalette或qgui 

 
  1. QPalette pal = palette();   
  2. pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));   
  3. setPalette(pal);  


通过设置窗体的背景色来实现,将背景色设置为全透。
效果:
窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明;
窗体客户区完全透明。
2、在MainWindow窗口的构造函数中使用如下代码 
  1. this->setAttribute(Qt::WA_TranslucentBackground, true);   
  2. 窗口变透明,label也变透明,看不到文字,但是其它控件类似textEdit、comboBox就不会透明,实现了窗口背景透明。 

、在MainWindow窗口的构造函数中使用如下代码 
    this->setWindowOpacity(level);其中level的值可以在0.0~1.0中变化。 
   效果:
窗口变成透明的,但是所有控件也是一样变成透明。 
4.窗口整体不透明,局部透明:
在Paint事件中使用Clear模式绘图。

 
  1. void TestWindow::paintEvent( QPaintEvent* )  
  2. {   
  3.     QPainter p(this);  
  4.     p.setCompositionMode( QPainter::CompositionMode_Clear );  
  5.     p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );   
  6. }   

效果:
绘制区域全透明。如果绘制区域有控件不会影响控件。
原文地址:https://www.cnblogs.com/lzh-Linux/p/3773768.html