免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1792 | 回复: 1
打印 上一主题 下一主题

设计Qt风格的C++的应用程序接口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-29 20:32 |只看该作者 |倒序浏览
原帖请见,这里仅引用我最认同的部分。
http://www.cppblog.com/len/archive/2008/05/11/49563.aspx

方便性陷阱
通常的误读是越少的代码越能使你达到编写更好的API这一目的.请记住,代码只写一遍,却要一遍又一遍地去理解阅读它.比如:

  1. QSlider *slider = new QSlider(12, 18, 3, 13, Qt::Vertical, 0, "volume");
复制代码

可以会比下面的代码更难阅读(甚至于编写)

  1. QSlider *slider = new QSlider(Qt::Vertical);
  2. slider->setRange(12, 18);
  3. slider->setPageStep(3);
  4. slider->setValue(13);
  5. slider->setObjectName("volume");
复制代码


布尔参数陷阱
布尔参数常常导致难以阅读的代码.特别地,增加某个bool参数到现存的函数一般都会是个错误的决定.在Qt中,传统的例子是repaint(),它带有一个可选的布尔参数,来指定背景是否删除(默认是删除).这就导致了代码会像这样子:

  1. widget->repaint(false);
复制代码

初学者可能会按字面义理解为,"不要重绘!"

自然的想法是bool参数节省了一个函数,因此减少了代码的臃肿.事实上,这增加了代码的臃肿,有多少Qt用户真正知道下面这三行代码在做什么呢?

  1. widget->repaint();
  2. widget->repaint(true);
  3. widget->repaint(false);
复制代码

好一点的API代码可能看起来像这样:

  1. widget->repaint();
  2. widget->repaintWithoutErasing();
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-12-29 20:39 |只看该作者
wxWidgets恰好使用了Qt反对的风格,下面是wxSlider构造函数的原型:

  1. wxSlider(wxWindow* parent,
  2.               wxWindowID id,
  3.               int value ,
  4.               int minValue,
  5.               int maxValue,
  6.               const wxPoint& point = wxDefaultPosition,
  7.               const wxSize& size = wxDefaultSize,
  8.               long style = wxSL_HORIZONTAL,
  9.               const wxValidator& validator = wxDefaultValidator,
  10.               const wxString& name = "slider");
复制代码


调用wxSlider的一个例子:

  1. slider = new wxSlider(panel, -1, 1 , 1, 100, wxPoint(100, 100));
复制代码

大家可以对照上面的QSlider体会一下:

  1. QSlider *slider = new QSlider(Qt::Vertical);
  2. slider->setRange(12, 18);
  3. slider->setPageStep(3);
  4. slider->setValue(13);
  5. slider->setObjectName("volume");
复制代码

[ 本帖最后由 pugs 于 2008-12-29 20:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP