QT学习(四)----360界面制作(1)

参照网上的资料,模仿了一份360新特效的界面。

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

360真实效果:(最好自己打开360看看!!)



 

先上效果图。(纯UI)


(现在没有任何的功能,之后再陆续添加,这样做比较好理解)

首先需要绘制Frame,就是看到的整个窗口。它是由两个圆角矩形组合起来的。

绘制代码如下:

 

[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放到指定的位置。两张是因为之后要实现动态的效果,所以要两张。(往后看就明白了)

上代码:

 

[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实现。

下一章实现窗口的拖拽等功能。

转载于:https://www.cnblogs.com/BSilence/p/3558496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值