dxfans的个人主页

http://www.qtcn.org/bbs/u/119684  [收藏] [复制]

dxfans

www.hnmade.com

  • 27

    关注

  • 81

    粉丝

  • 616

    访客

  • 等级:侠客
  • 总积分:218
  • 男,1985-05-08

最后登录:2015-03-05

更多资料

日志

Qt之实现360安全卫士主界面(一)

2012-03-14 12:12
摘自Qt开发者驿站  
该博文只是模仿[font=&amp]360安全卫士的主界面,并不牵涉其中的任何业务功能;重在个人见解以及界面实现;关于[font=&amp]360安全卫士的主界面,我想大家都见到过,毕竟基本大部分人都安装过这个软件,基于我对其界面的个人见解,对主界面分割为四部分:分别为标题栏、工具栏、内容区域、状态栏,分割图例如下图所示:


由于标题栏、工具栏、内容区域和状态栏都不是标准的部件,因此只能子类化部件进行自定义开发;主窗口继承于QFrame,而标题栏、工具栏、内容区域与状态栏都继承于QWidget;最后在主窗口中使用QVBoxLayout布局将其他部件加入到该布局中即可,其中标题栏和工具栏以及状态栏都是固定高度的,宽度和内容区域是随窗口缩放而缩放的。使用[font=&amp]Qt实现主界面的效果如下图所示(按【[font=&amp]Alt+F4】键退出主界面):


大家可以对比一下,如果在该界面中再添加一些内容,就会越来越像了,后续博文会继续添加内容。
下面讲解具体实现方法,当然方法不只一种,也欢迎各位博友提出自己的看法与实现方式。
1、  自定义主窗口标题栏属于操作系统,我们不能控制标题栏;因此要去掉窗口默认的标题栏,我们使用[[font=&amp]Qt::FramelessWindowHint窗口样式即可,这样就没有了默认的标题栏,这时需增加我们自定义的标题栏部件即可,再依次增加其他部件到布局中;这些都是很基本的,不多阐述,代码如下:
  1. setWindowFlags(Qt::FramelessWindowHint);
    //创建标题栏
    m_pTitleBar = new TitleBar(this);
    //创建工具栏
    m_pToolBar = new ToolBar(this);
    //创建内容区域
    m_pContentWidget = new ContentWidget(this);
    //创建状态栏
    m_pStatuBar = new StatuBar(this);
    //创建布局
    m_pMainLayout = new QVBoxLayout(this);
    //将部件加入到布局中
    m_pMainLayout->addWidget(m_pTitleBar);
    m_pMainLayout->addWidget(m_pToolBar);
    m_pMainLayout->addWidget(m_pContentWidget);
    m_pMainLayout->addWidget(m_pStatuBar);
    //设置间距与边缘空白
    m_pMainLayout->setSpacing(0);
    m_pMainLayout->setContentsMargins(0,0,0,0);

2、主窗口背景以及圆角实现
主窗口背景使用图片平铺实现,当然使用Qt的样式表是最为简单方便的了;Qt的样式表格式和css基本一致;如果对css熟悉的话,对Qt的样式表(qss)就会很快熟悉起来;
setStyleSheet("QFrame {background-image:url(:/image/frame.jpg);border:1px solid black;}");
360安全卫士的主界面是圆角的,我们的主界面当然也要实现圆角的了;在主窗口的重绘事件中添加如下代码即可:
  1. //生成一张位图
    QBitmap objBitmap(size());
    //QPainter用于在位图上绘画
    QPainter painter(&objBitmap);
    //填充位图矩形框(用白色填充)
    painter.fillRect(rect(),Qt::white);
    painter.setBrush(QColor(0,0,0));
    //在位图上画圆角矩形(用黑色填充)
    painter.drawRoundedRect(this->rect(),10,10);
    //使用setmask过滤即可
    setMask(objBitmap);

3、主窗口大小
主窗口缩放到一定值之后便不能缩小,所以应该设置其最小宽度和高度;
  1. setMinimumWidth(850);
    setMinimumHeight(600);

[font=&amp]OK,主界面基本看起来有点像样了,当然这个主界面还不能移动,不能缩放,没有工具栏等,这些功能在后续的博文中会阐述添加。摘自Qt开发者驿站
分类:默认分类|回复:12|浏览:5229|全站可见|转载
 
 
删除

zhongfugutao:请问如果想进一步做的话,内容区域随着工具栏按钮的改变而改变的话,楼主有什么思路给提示一下?谢谢!

2012-10-09 10:48 -

dxfans:参数传递,信号槽通知来实现动态切换

2012-10-09 12:50
删除

wuweihua0115(有图)如何修改标题栏的样式??(最大最小按钮等的样式)

2012-07-16 09:55 -
删除

zdm_5240:您好,我们正在做一个项目,界面就是模仿360做的,能给个源码么,谢谢了!
  zdm_5240@163.com

2012-07-05 08:48 -
删除

klan131:你公开源代码必然会被抄,有很多人指望这个呢~
楼主文章写的很好~对于指挥信手拈来的人来说别指望了,除非楼主发慈悲赏赐你源代码,我不是小白,看了半个多月qt了,表示可以慢慢消化

2012-05-22 09:40 -
删除

niubiairenka:我当初需要做一个自定义标题栏,看到你这篇日志如获至宝,仔仔细细认认真真的从头看完,结果。。。还是不知道怎么下手,你说蛋疼不

2012-05-15 14:39 -
删除

niubiairenka:我们在下载别人的代码里面很多代码可能都没接触过,需要通过调试慢慢理解每一步的作用,看代码有时也是一个困难的过程,更何况没有代码就看你这些日志,难道就能模仿出你的效果来了吗?

2012-05-15 14:37 -
删除

niubiairenka:不公开源代码,这个东西发出来无任何意义,这样搞真不如在源代码上写注释

2012-05-15 14:34 -
删除

uidab:分析的不错.
对于新手来说这些都是不好做的, 如果能再详细点就好了, 比如如何开始, 建立什么样的工程等等.

2012-03-29 11:34 -

dxfans:这可能是我没考虑到的地方。。谢谢提醒

2012-03-31 10:30
删除

jdwx:说实话,这个是相当的难做!

2012-03-14 13:12 -

dxfans:具体指的是哪方面?请指教

2012-03-14 15:35

Powered by phpwind v8.7 Certificate Copyright Time now is:04-26 22:33
©2005-2016 QTCN开发网 版权所有 Gzip disabled