------记Project of AIM_PointCloudTrainingManager------

---------------------------------------------------------------------------------------------------------

 ->SnippetListItem.cpp:

#include "stdafx.h"
#include "SnippetListItem.h"
#include "moc_SnippetListItem.cpp"
#include "ui_SnippetListItem.h"
#include "SnippetImager.h" #include <alx/Utils/make_unique.h>
#include <alx/Platform/StringUtils.h>
#include <alx/Platform/Platform.h>
#include <alx/Inline/IEnumerate.h> #include <alx/UIPlatform/API/Widget/Widget.h> namespace alx{ SnippetListItem::SnippetListItem( const SnippetInfo& snippet ) :
m_ui(std::make_unique<Ui::SnippetListItem>())
{
m_ui->setupUi(this);
init(snippet);
} void SnippetListItem::init( const SnippetInfo& snippet )
{
m_categories.emplace_back("Sign");
m_categories.emplace_back("Traffic Light");
m_categories.emplace_back("Tree");
m_categories.emplace_back("Unknown"); for ( const auto& item : m_categories )
m_ui->m_comboBoxCategory->addItem( W2Q( Utf8ToW(item) ) ); m_ui->m_textEditSimilarity->append( W2Q( snippet.description ) );
m_ui->m_textEditSimilarity->append( W2Q( StringUtils::Int2String( snippet.points.size() ) + L" points" ) ); m_ui->m_textEditSimilarity->append( W2Q( L"Confirmed: " + Utf8ToW( snippet.confirmedCategoryID ) ) );
m_ui->m_textEditSimilarity->append( W2Q( L"Recognized: " + Utf8ToW( snippet.recognizedCategoryID ) ) ); for ( const auto& item : snippet.similarity )
{
m_ui->m_textEditSimilarity->append( W2Q( Utf8ToW( item.first) + L": " + StringUtils::Double2String(item.second) ) );
} if( snippet.confirmedCategoryID.empty() )
m_ui->m_comboBoxCategory->setCurrentText( W2Q(Utf8ToW("Unknown") ) );
else
m_ui->m_comboBoxCategory->setCurrentText( W2Q(Utf8ToW( snippet.confirmedCategoryID ) ) ); connect(m_ui->m_comboBoxCategory, SIGNAL(currentIndexChanged(int)), this, SLOT(onCategoryComboBoxIndexChanged(int)));
connect(m_ui->m_checkBoxConfirm, SIGNAL(stateChanged(int) ), this, SLOT(onConfirmCheckBoxStateChanged(int))); m_snippetID = snippet.snippetID; SnippetImager snpImager;
auto images = snpImager.getImages( snippet.points ); if ( images.size() == 5 )
{
auto iconSize = QSize(100,100);
m_ui->m_pushButton1->setIcon( QPixmap::fromImage( *(images[0].get()) ) );
m_ui->m_pushButton1->setIconSize(iconSize);
m_ui->m_pushButton2->setIcon( QPixmap::fromImage( *(images[1].get()) ) );
m_ui->m_pushButton2->setIconSize(iconSize);
m_ui->m_pushButton3->setIcon( QPixmap::fromImage( *(images[2].get()) ) );
m_ui->m_pushButton3->setIconSize(iconSize);
m_ui->m_pushButton4->setIcon( QPixmap::fromImage( *(images[3].get()) ) );
m_ui->m_pushButton4->setIconSize(iconSize);
m_ui->m_pushButton5->setIcon( QPixmap::fromImage( *(images[4].get()) ) );
m_ui->m_pushButton5->setIconSize(iconSize);
}
} void SnippetListItem::onCategoryComboBoxIndexChanged( int index )
{
m_ui->m_checkBoxConfirm->setChecked(true);
} void SnippetListItem::onConfirmCheckBoxStateChanged( int state )
{
if( 2 == state )
{
m_ui->m_textEditSimilarity->setStyleSheet("QTextEdit { background: pink }");
}
else
{
m_ui->m_textEditSimilarity->setStyleSheet("QTextEdit { background: white }");
}
} std::string SnippetListItem::getSnippetId()
{
return m_snippetID;
} std::string SnippetListItem::getCategory()
{
return m_ui->m_comboBoxCategory->currentText().toStdString();
} int SnippetListItem::getConfirmState()
{
return m_ui->m_checkBoxConfirm->checkState();
} }

分析:  

1、命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中。传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。

标准C++库(不包括标准C库)中所包含的所有内容(包括常量、变量、结构、类和函数等)都被定义在命名空间std(standard标准)中了。

--->命名空间的定义格式为:(取自C++标准文档)

有名的命名空间:

 namespace 命名空间名 {

              声明序列可选

       }

无名的命名空间:

namespace {

声明序列可选

}

--->命名空间的成员,是在命名空间定义中的花括号内声明了名称。可以在命名空间的定义内,定义命名空间的成员(内部定义)。也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义)。

命名空间成员的外部定义的格式为:

命名空间名::成员名 ……

注意:

不能在命名空间的定义中声明(另一个嵌套的)子命名空间,只能在命名空间的定义中定义子命名空间。

也不能直接使用“命名空间名::成员名 ……”定义方式,为命名空间添加新成员,而必须先在命名空间的定义中添加新成员的声明。

另外,命名空间是开放的,即可以随时把新的成员名称加入到已有的命名空间之中去。方法是,多次声明和定义同一命名空间,每次添加自己的新成员和名称。

还可以用多种方法,来组合现有的命名空间,让它们为我所用。

--->对命名空间中成员的引用,需要使用命名空间的作用域解析运算符::。

可以使用标准C++的using编译指令来简化对命名空间中的名称的使用。格式为:

using namespace 命名空间名[::命名空间名……];

在这条语句之后,就可以直接使用该命名空间中的标识符,而不必写前面的命名空间定位部分。因为 using指令,使所指定的整个命名空间中的所有成员都直接可用。

PS:namespace可以使用别名,在对一些名字比较长的namespace使用别名的话,是一件很惬意的事。但是与using相同,最好避免在头文件使用namespace的别名(f比first更容易产生冲突)。
namespace f = first;

而且namespace提供了单独的作用域,它类似于静态全局声明的使用,可以使用未命名的namespace定义来实现:
namespace { int count = 0;}         //这里的count是唯一的
                                                //在程序的其它部分中count是有效的
void chg_cnt (int i) { count = i; }

参考:C++中namespace的使用

C++中的namespace

2、对于C++中的类,结构体,共用体等具有成员函数或变量的数据类型(对象)时,如果存在对象a,而对象中有成员b,那么可以使用a.b的方式,使用对应的成员。
如果存在变量p,指向a, 即p = &a, 这时可以用p->b来使用成员b。
即,->操作符是用于带成员的类型对应指针上,用来提取成员变量或函数用的。
p->b等同于(*p).b。
对于任意的对象a,写作(&a)->b也是可以的,不过很少有这样写。

3、关于智能指针:

Lepus经历收获杂谈(一)——confirm features的小工具的更多相关文章

  1. Lepus经历收获杂谈(二)——QT

    QT简介及相关使用指南 1.QT Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框 ...

  2. 仿javascript中confirm()方法的小插件

    10天没有写博客了,不知道为什么,心里感觉挺不舒服的,可能这是自己给自己规定要去完成的事情,没有按照计划执行,总会心里不怎么舒服.最近事情挺多的,终于今天抽空来更新一下博客了. 今天写的是一个小插件. ...

  3. [杂谈] 一个关于 as 的小测试

    代码如下:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 procedure TForm1.Button1Click(Sender: TObject); va ...

  4. Linux杂谈: gcc对结构体大小的默认处理方式

    1. 发现问题 最近在编写代码过程中发现,对一个结构体进行 sizeof 操作时,有时候大小是填充过的,有时候又没有填充. 那么,如果在代码中没有显示的指定要求编译器进行对齐时,gcc的默认处理是怎样 ...

  5. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  6. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  7. 专业上的常用的工具和类库集 By 老衣

    Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. C ...

  8. 转《UNIX编程艺术》读书心得

    花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...

  9. PhyLab2.0需求与功能分析改进文档(NABCD)

    PhyLab1.0需求规格说明文档 1. 概述 1.1 项目概述 软剑攻城队小组于2015学年开发了PhyLab物理实验网站,一经发布好评如潮.网站的核心功能是提供预习报告和自动数据处理,而后加入了论 ...

随机推荐

  1. 2016ACM-ICPC Qingdao Online青岛网络赛题解

    TonyFang+Sps+我=5/12 滚了个大粗 2016年9月21日16:42:36 10题完工辣 01 题意:求形同的数中大于n的最小值 题解:预处理所有的(5194个),在这里面二分 #inc ...

  2. 响应式设计Responsinator工具推荐

    from:http://www.25xt.com/allcode/4066.html 原文推荐了5种,感觉有用的吧就这一种,所以收藏过来. Responsinator工具的好处Responsinato ...

  3. C#异常处理策略

    1.如果某些异常,本组件无法处理,不要捕获,但要声明有这个异常.例如SecurityException. 2.如果某些异常,本组件可以处理,捕获并处理它,不再声明此异常.例如DirectoryNotF ...

  4. winform 如何控制输入法

    在工作中遇到这样一个问题,在系统使用过程中,输入法会变灰导致无法使用输入法输入文字,就好像输入法被禁用了没有启用似的.对此,在这里做个备录 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享 ...

  5. 对话机器学习大神Yoshua Bengio(上)

    Yoshua Bengio教授(个人主页)是机器学习大神之一,尤其是在深度学习这个领域.他连同Geoff Hinton老先生以及 Yann LeCun(燕乐存)教授,缔造了2006年开始的深度学习复兴 ...

  6. linux用户配置和用户权限

    一.查看用户: (1)在终端里.输入:cat /etc/passwd,查看/etc/passwd文件就行了.(2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 查看当前在线用户 ...

  7. Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...

  8. 行列有序矩阵求第k大元素

    问题来源:http://www.careercup.com/question?id=6335704 问题描述: Given a N*N Matrix. All rows are sorted, and ...

  9. iOS block示例

    // // block.h // Block // // Created by tqh on 15/4/12. // Copyright (c) 2015年 tqh. All rights reser ...

  10. HDU 1869 六度分离

    六度分离 http://acm.hdu.edu.cn/showproblem.php?pid=1869 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一 ...