void iPopupMenu::ShowPopupMenu(const iPoint &pos, iAlignment algn) { if (m_Items.GetSize() == 0) return; iRect nrect(0,0,0,0); for (uint32 xx=0; xx< m_Items.GetSize(); ++xx) { m_Items[xx]->m_Button->SetElementPos(iPoint(nrect.w,0)); nrect.w += m_Items[xx]->m_Button->GetElementRect().w; nrect.h = iMAX(nrect.h,m_Items[xx]->m_Button->GetElementRect().h); } nrect.y = pos.y-nrect.h; nrect.x = pos.x - nrect.w/2; iSize ssize = iWindowManager::GetScreenSize(); if (nrect.x<0) nrect.x=0; else if (nrect.x2() > (sint32)ssize.w) nrect.x = ssize.w - nrect.w; if (nrect.y<0) nrect.y=0; else if (nrect.y2() > (sint32)ssize.h) nrect.y = ssize.h - nrect.h; SetWndRect(nrect); ShowWindow(SW_SHOW); SetActiveWindow(); }
void QRoundedRect::SetPattern(int nPATTERN) { nPatternType = nPATTERN; //样式类型 QRectF nrect(Rpos.x(),Rpos.y(),qWidth,qHeight); QLinearGradient gradient(nrect.topLeft(),nrect.bottomRight()); QRadialGradient Radial(nrect.center(),nrect.width()/2,nrect.center()); gradient.setSpread(QGradient::PadSpread);// RepeatSpread QBrush br=brush(); br.setColor(nFrontColor); //设置前景色即样式颜色 switch(nPATTERN) { case 0:br.setStyle(Qt::NoBrush);break; case 1:br.setColor(nBackColor);br.setStyle(Qt::SolidPattern);break; // case 2:br.setStyle(Qt::Dense1Pattern);break; // case 3:br.setStyle(Qt::Dense2Pattern);break; // case 4:br.setStyle(Qt::Dense3Pattern);break; // case 5:br.setStyle(Qt::Dense4Pattern);break; // case 6:br.setStyle(Qt::Dense5Pattern);break; // case 7:br.setStyle(Qt::Dense6Pattern);break; // case 8:br.setStyle(Qt::Dense7Pattern);break; // case 9:br.setStyle(Qt::HorPattern);break;//setBrush(Qt::HorPattern);break; // case 10:br.setStyle(Qt::VerPattern);break; // case 11:br.setStyle(Qt::CrossPattern);break; // case 12:br.setStyle(Qt::BDiagPattern);break; // case 13:br.setStyle(Qt::FDiagPattern);break; // case 14:br.setStyle(Qt::DiagCrossPattern);break; case 2: //横向过度 gradient.setStart(nrect.x(),nrect.y()+nrect.height()); gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(1,nBackColor ); break; case 3: //横向对称过度 gradient.setStart(nrect.x(),nrect.y()+nrect.height()); gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(0.5,nBackColor ); gradient.setColorAt(1,nFrontColor ); break; case 4: //纵向过度 gradient.setStart(nrect.x()+nrect.width(),nrect.y()); gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(1,nBackColor); break; case 5: //纵向对称过度 gradient.setStart(nrect.x()+nrect.width(),nrect.y()); gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(0.5,nBackColor); gradient.setColorAt(1,nFrontColor ); break; case 6: //斜上过度 gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(1,nBackColor ); break; case 7: //斜上对称过度 gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(0.5,nBackColor ); gradient.setColorAt(1,nFrontColor ); break; case 8: //斜下过度 gradient.setStart(nrect.x(),nrect.y()+nrect.height()); gradient.setFinalStop(nrect.x()+nrect.width(),nrect.y()); gradient.setColorAt(0,nBackColor ); gradient.setColorAt(1,nFrontColor); break; case 9: //斜下对称过度 gradient.setStart(nrect.x(),nrect.y()+nrect.height()); gradient.setFinalStop(nrect.x()+nrect.width(),nrect.y()); gradient.setColorAt(0,nFrontColor ); gradient.setColorAt(0.5,nBackColor ); gradient.setColorAt(1,nFrontColor ); break; case 10: //右上角辐射 gradient.setStart(nrect.x()+nrect.width(),nrect.y()); gradient.setFinalStop(nrect.x(),nrect.y()+nrect.height()); gradient.setColorAt(0,nBackColor ); gradient.setColorAt(1,nFrontColor ); break; case 11: //左上角辐射 gradient.setColorAt(0,nBackColor ); gradient.setColorAt(1, nFrontColor); break; case 12: //中心辐射 Radial.setColorAt(0,nBackColor ); Radial.setColorAt(1,nFrontColor ); setBrush(Radial); return; break; case 13: //待操作 Radial.setFocalPoint(nrect.x(),nrect.y()+nrect.height()/2); Radial.setColorAt(0,nBackColor ); Radial.setColorAt(1,nFrontColor ); setBrush(Radial); return; break; default: break; } if(nPATTERN >= 2 ) { setBrush(gradient); } else { setBrush(br); } }