QT學習(四)----360界面製做(1)

參照網上的資料,模仿了一份360新特效的界面。安全

源代碼在:http://download.csdn.net/detail/zhangyang1990828/5238013less

360真實效果:(最好本身打開360看看!!)
函數



 

先上效果圖。(純UI)佈局


(如今沒有任何的功能,以後再陸續添加,這樣作比較好理解)this

首先須要繪製Frame,就是看到的整個窗口。它是由兩個圓角矩形組合起來的。spa

繪製代碼以下:.net

 

[cpp]  view plain copy
 
  1. void DataBrain::paintEvent(QPaintEvent *)  
  2. {  
  3.     QBitmap bitmap(this->size());//建立一個位圖來存儲這個組合體  
  4.     QPainter painter(&bitmap);//建立一個相似於繪畫板的對象,經過它來在bitmap上繪圖  
  5.     painter.fillRect(bitmap.rect(),Qt::white);  
  6.     painter.setBrush(QColor(0,0,0));  
  7.         painter.drawRoundRect(QRect(0,2,this->width(),this->height()-2),5,5);  
  8.     painter.drawRoundRect(QRect(20,0,100,2),2,2);  
  9.     setMask(bitmap);//將畫好的bitmap遮擋在屏幕前方  
  10. }  

這樣就繪製好了整個窗口的Frame,以後須要作的就是在這個Frame上貼圖製做模糊透明效果的按鈕。對象

 

背景其實就是將兩張圖片分別存儲到兩個label中,讓後經過setGeometry將label放到指定的位置。兩張是由於以後要實現動態的效果,因此要兩張。(日後看就明白了)blog

上代碼:圖片

 

[cpp]  view plain copy
 
  1. void DataBrain::createFrame()  
  2. {  
  3.     this->setWindowTitle(tr("DataBrain"));  
  4.     this->resize(QSize(WINDOW_WIDTH,WINDOW_HEIGHT));  
  5.     setWindowFlags(Qt::FramelessWindowHint);//設置窗口的樣式  
  6.       
  7.     m_pLabelBkTop=new QLabel(this);   
  8.     m_pLabelBkTop->setPixmap(QPixmap(":/images/images/bg_top.png"));  
  9.     m_pLabelBkTop->setGeometry(QRect(0,2,this->width(),this->height()-2));//在目標區域顯示label  
  10.   
  11.     m_pLabelBkBottom=new QLabel(this);  
  12.     m_pLabelBkBottom->setPixmap(QPixmap(":/images/images/bg_bottom.png"));  
  13.     m_pLabelBkBottom->setGeometry(QRect(0,2,this->width(),this->height()-2));  
  14.   
  15. }  

爲了實現最後的拖動效果,咱們須要將前景的四張拖動出現的圖合併成一張。

 

窗口上的顯示「360安全桌面」「木馬防火牆」..的按鈕的實現,咱們將這種按鈕抽象成一個類,方便之後的調用。
以後只要將這類按鈕的對象佈局到這個窗口上就實現了前面實現的效果了(純UI)。

按鈕類裏的函數:(不貼所有代碼了,須要的去http://download.csdn.net/detail/zhangyang1990828/5238013下載

 

[cpp]  view plain copy
 
  1. void DataBrain::createWidget()//四張圖片合併一個pixmap  
  2. {  
  3.     QPixmap pixmap(QSize(this->width()*WINDOW_PAGE_COUNT,WINDOW_HEIGHT-2));  
  4.     QPainter painter(&pixmap);  
  5.     for(int i=0;i<WINDOW_PAGE_COUNT;i++)  
  6.     {  
  7.         painter.drawImage(QRect(WINDOW_WIDTH*i,0,WINDOW_WIDTH,WINDOW_HEIGHT-2),QImage(tr(":/images/images/desktop_%1.jpg").arg(i)));  
  8.     }  
  9.   
  10.     m_pLabelFg=new QLabel(this);  
  11.     m_pLabelFg->resize(pixmap.size());  
  12.     m_pLabelFg->setPixmap(pixmap);  
  13.     m_pLabelFg->move(WINDOW_START_X,WINDOW_START_Y);  
  14.   
  15.     QStringList nameList;  
  16.     nameList << tr("360安全桌面 ")  
  17.              << tr("木馬防火牆  ")  
  18.              << tr("360保鏢     ")  
  19.              << tr("電腦門診    ");  
  20.     for(int i=0;i<WINDOW_BUTTON_COUNT;i++)  
  21.     {  
  22.         CLabel *label=new CLabel(this);  
  23.         label->resize(QSize(155,45));  
  24.         label->setPixmap(QPixmap(tr(";/images/images/btn_%1.png").arg(i)));  
  25.         label->setText(nameList.at(i));  
  26.         label->move(8+i*170,319);  
  27.         m_pLabelBtnArray[i]=label;  
  28.           
  29.     }  
  30.     m_pCloseBtn=new QToolButton(this); //關閉按鈕  
  31.     m_pCloseBtn->setFocusPolicy(Qt::NoFocus);  
  32.     m_pCloseBtn->setStyleSheet("background:transparent;border:0px;");  
  33.     setButtonIcon(m_pCloseBtn, EButtonMouseDefault);  
  34.     m_pCloseBtn->move(QPoint(this->width()-52,1));  
  35.   
  36.     //raise widget  
  37.     m_pLabelBkTop->raise();  
  38.     m_pCloseBtn->raise();  
  39.   
  40.     for (int i = 0; i < WINDOW_BUTTON_COUNT; i++)  
  41.     {  
  42.         m_pLabelBtnArray[i]->raise();  
  43.     }  
  44. }  
  45. void DataBrain::createFilter()  
  46. {  
  47.   
  48. }  
  49. void DataBrain::setButtonIcon(QToolButton *btn, EButtonMouseState state)  
  50. {  
  51.     QPixmap pixmap(":/images/images/btn_close.png");//自定義關閉按鈕  
  52.     int nWidth = pixmap.width()/4;  
  53.     int nHeight = pixmap.height();  
  54.     btn->setIcon(QIcon(pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight))));  
  55.     btn->setIconSize(QSize(nWidth, nHeight));  
  56. }  

 

這樣就完成了360新特性界面的純UI實現。

下一章實現窗口的拖拽等功能。

相關文章
相關標籤/搜索