设计 Qt-Style C++ API
来源:互联网 发布:如何在淘宝上申请直播 编辑:程序博客网 时间:2024/06/06 14:26
好的API,仁者见仁智者见智。
优秀的API具有几个特征:
1 最小化
每个类中尽量少的公有成员,尽量少的类
2 完整性
3 清晰简单的语义
4 直观
5 便于记忆
6 可读性
Let us go!!!
不是代码越少越好
看下面两段:
QSlider *slider = new QSlider(12, 18, 3, 13, Qt::Vertical, 0, "volume");
QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(12, 18); slider->setPageStep(3); slider->setValue(13); slider->setObjectName("volume");
很显然,第一段的代码比第二段少了很多,但是读起来很费劲,不够直观。
使用了太多的Bool不一定是好事
看代码:
widget->repaint(false);
上面的代码是什么意思呢?不允许重画对嘛?
那再看:
widget->repaint(); widget->repaint(true); widget->repaint(false);
是不是懵逼了,上面都是什么意思呢?
更好的办法:
1 不使用bool:
widget->repaint(); widget->repaintWithoutErasing();
2 使用enum代替bool:
str.replace("%USER%", user, false); // Qt 3 str.replace("%USER%", user, Qt::CaseInsensitive); // Qt 4
使用指针还是引用?
void getHsv(int *h, int *s, int *v) const void getHsv(int &h, int &s, int &v) const
很多时候,我们都会说引用比指针更好。
但是看看使用:
color.getHsv(&h, &s, &v); color.getHsv(h, s, v);
应该可以看出来,还是第一种,使用指针看上去更容易理解吧!!!
Static Polymorphism
这是个牛逼的,慢慢再详细介绍。
最后,看看QT3 和QT4的对比:
qt3:
class QProgressBar : public QWidget { ... public: int totalSteps() const; int progress() const; const QString &progressString() const; bool percentageVisible() const; void setPercentageVisible(bool); void setCenterIndicator(bool on); bool centerIndicator() const; void setIndicatorFollowsStyle(bool); bool indicatorFollowsStyle() const; public slots: void reset(); virtual void setTotalSteps(int totalSteps); virtual void setProgress(int progress); void setProgress(int progress, int totalSteps); protected: virtual bool setIndicator(QString &progressStr, int progress, int totalSteps); ... };
qt4:
class QProgressBar : public QWidget { ... public: void setMinimum(int minimum); int minimum() const; void setMaximum(int maximum); int maximum() const; void setRange(int minimum, int maximum); int value() const; virtual QString text() const; void setTextVisible(bool visible); bool isTextVisible() const; Qt::Alignment alignment() const; void setAlignment(Qt::Alignment alignment); public slots: void reset(); void setValue(int value); signals: void valueChanged(int value); ... };
3 0
- 设计 Qt-Style C++ API
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 设计Qt风格的C++API【转】
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 设计Qt风格的C++API【转
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 设计Qt风格的C++API
- 译:设计Qt式的C++ API
- Qt的皮肤设计(Style Sheet)
- Qt的皮肤设计(Style Sheet)
- Qt的皮肤设计(Style Sheet)
- Qt的皮肤设计(Style Sheet)
- Qt的皮肤设计(Style Sheet)
- HTML在两个div标签中间画一条竖线
- Ajax实例讲解与技术原理
- mysql-5.7.15-winx64修改初始密码windows下
- 为什么要设置Java环境变量(详解)
- 深入理解Java虚拟机到底是什么
- 设计 Qt-Style C++ API
- Google Textsum model 分析
- apk 反编译
- Cause: net.sf.cglib.beans.BulkBeanException 之解决方法
- chmod命令详解
- 服务器数据库数据恢复
- php中的处理字符串的函数
- windows 内核函数前缀解析
- HEVC代码学习1:TAppEncoder的main函数