笔记:关于QMap使用时候的一点技巧

这篇博客纯粹是笔记,非技术类探讨,用于记录一下我在使用QMap的时候发现的一个小技巧。

今天设计界面的时候遇到一个现象,就是对于界面上的某些控件(如button)而言,在没有找到对应的数据的时候,需要显示一个默认的值(比如显示“请选择)。
因为采用的容器是QMap,因此在获得某个值之前需要先找一下看看这个数据是否存在在QMap容器中,如果存在就直接将数据拿出展示,如果没有,就显示为默认值。
示例代码如下:

QMap<int, QString> testNamesMap;
......
ui.testBtn->setText(testNamesMap.value(testID));

因为事先没有注意到这一点,因此在容器内找不到这个ID的时候,就会出现按钮显示为空的状态,而不是默认的“请输入”。

针对这个问题,第一反应是加个判断,就是先找找看这个容器里面有没有这个ID,如果没有就手动将显示设置为“请输入”。

但是在我查看手册之后,发现完全可以不这么做,先看一下QMap::value()的函数原型:

const T QMap::value(const Key &key, const T &defaultValue = T()) const

由上述原型可见,value函数还有一个有默认值的第二个参数,这个参数的作用就是在容器内没有查找到指定key值的时候,返回这个默认值
如果填了默认值,就返回默认值,如果没填,就返回value类型的默认构造函数下的默认值(如value如果是QString类型,那么就会返回一个空字符串)。

以下是手册详细解释:

Returns the value associated with the key key.
If the map contains no item with key key, the function returns defaultValue. If no defaultValue is specified, the function returns a default-constructed value. If there are multiple items for key in the map, the value of the most recently inserted one is returned.

因此,上述代码我就可以摒弃掉这个繁杂的判断,直接设置这个默认参数即可,改过之后的代码如下:

QMap<int, QString> testNamesMap;
......
ui.testBtn->setText(testNamesMap.value(testID, "请选择"));
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页