//设置按钮不同状态下的图标 void TitleBar::SetBtnIcon(QToolButton *pBtn,eBtnMoustState state,bool bInit/*=false*/) { //获得图片路径 QString strImagePath = GetBtnImagePath(pBtn,bInit); //创建QPixmap对象 QPixmap objPixmap(strImagePath); //得到图像宽和高 int nPixWidth = objPixmap.width(); int nPixHeight = objPixmap.height(); //如果状态不是无效值 if(state!=eBtnStateNone) { if(pBtn == m_pBtnSkin) { pBtn->setIcon(objPixmap.copy((nPixWidth/3)*(state-1),0,nPixWidth/3,nPixHeight)); //设置按钮图片大小 pBtn->setIconSize(QSize(nPixWidth/3,nPixHeight)); }else { /*设置按钮图片 按钮的图片是连续在一起的,如前1/4部分表示默认状态下的图片部分,接后的1/4部分表示鼠标移到按钮状态下的图片部分 */ pBtn->setIcon(objPixmap.copy((nPixWidth/4)*(state-1),0,nPixWidth/4,nPixHeight)); //设置按钮图片大小 pBtn->setIconSize(QSize(nPixWidth/4,nPixHeight)); } } }
//创建子部件 void TitleBar::CreateWidget() { //图像标签--logo m_pLabelIcon = new QLabel(this); QPixmap objPixmap(":/res/images/360AboutLogo.png"); m_pLabelIcon->setPixmap(objPixmap.scaled(TITLE_H,TITLE_H)); //文本标签--标题 m_pLabelTitle = new QLabel(this); m_pLabelTitle->setText(QString("360 Safe Guard V8.5")); //文本标签--样式版本 m_pLabelVersion = new QLabel(this); m_pLabelVersion->setText(QString("Use Class Style")); //设置鼠标形状 m_pLabelVersion->setCursor(Qt::PointingHandCursor); //按钮--更换皮肤 m_pBtnSkin = new QToolButton(this); //设置初始图片 SetBtnIcon(m_pBtnSkin,eBtnStateDefault,true); //按钮--菜单 m_pBtnMenu = new QToolButton(this); SetBtnIcon(m_pBtnMenu,eBtnStateDefault,true); //按钮--最小化 m_pBtnMin = new QToolButton(this); SetBtnIcon(m_pBtnMin,eBtnStateDefault,true); //按钮--最大化/还原 m_pBtnMax = new QToolButton(this); SetBtnIcon(m_pBtnMax,eBtnStateDefault,true); //按钮--关闭 m_pBtnClose = new QToolButton(this); SetBtnIcon(m_pBtnClose,eBtnStateDefault,true); //获得子部件 const QObjectList &objList = children(); for(int nIndex=0; nIndex < objList.count(); ++nIndex) { //设置子部件的MouseTracking属性 ((QWidget*)(objList.at(nIndex)))->setMouseTracking(true); //如果是QToolButton部件 if(0==qstrcmp(objList.at(nIndex)->metaObject()->className(),"QToolButton")) { //连接pressed信号为slot_btnpress connect(((QToolButton*)(objList.at(nIndex))),SIGNAL(pressed()),this,SLOT(slot_btnpress())); //连接clicked信号为slot_btnclick connect(((QToolButton*)(objList.at(nIndex))),SIGNAL(clicked()),this,SLOT(slot_btnclick())); // connect(((QToolButton*)(objList.at(nIndex))),SIGNAL(enterEvent()),this,SLOT(slot_btnclick())); //设置顶部间距 ((QToolButton*)(objList.at(nIndex)))->setContentsMargins(0,VALUE_DIS,0,0); } } }
//创建子部件 void TitleBar::create_widget() { //设置字号 QFont ft; ft.setPointSize( 16 ); //ui.label_4->setFont(ft); //图像标签--logo mp_label_icon = new QLabel( this ); QPixmap objPixmap( ":image/res/caption_logo.bmp" ); //QBitmap mask = objPixmap.createMaskFromColor( QColor( 255, 255, 255 ), Qt::MaskInColor ); //objPixmap.setMask( mask ); mp_label_icon->setPixmap( objPixmap.scaled( TITLE_H*4, TITLE_H ) ); mp_label_icon->setMinimumSize( mp_label_icon->sizeHint() ); //文本标签--标题 mp_label_title = new QLabel( this ); mp_label_title->setText( QString( "阀厅红外在线监测系统" ) ); mp_label_title->setMinimumSize( mp_label_title->sizeHint() ); mp_label_title->setFont( ft ); //按钮--最小化 mp_btn_min = new QToolButton(this); set_btn_icon( mp_btn_min, eBtnStateDefault, true); //按钮--关闭 mp_btn_close = new QToolButton(this); set_btn_icon(mp_btn_close,eBtnStateDefault,true); //获得子部件 const QObjectList &objList = children(); qDebug()<<"子部件"<<objList[0]; for(int nIndex=0; nIndex<objList.count(); ++nIndex) { //设置子部件的MouseTracking属性 ( (QWidget*)(objList.at(nIndex)))->setMouseTracking(true); //如果是QToolButton部件 if(0==qstrcmp(objList.at(nIndex)->metaObject()->className(),"QToolButton")) { //连接pressed信号为slot_btnpress connect( ( ( QToolButton* )( objList.at( nIndex ) ) ), SIGNAL( pressed() ), this, SLOT( slot_btnpress() ) ); //连接clicked信号为slot_btnclick connect( ( ( QToolButton* )( objList.at( nIndex ) ) ), SIGNAL( clicked() ), this, SLOT( slot_btnclick() ) ); //设置顶部间距 ( (QToolButton*)(objList.at(nIndex)))->setContentsMargins(0,VALUE_DIS,0,0); } } }