------记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. 对话机器学习大神Yoshua Bengio(上)

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

  2. css之margin && padding讲解

    margin && padding盒子模型: margin是模块与模块的空隙,padding是内容与边框的空隙 注: 1.margin:边缘.空白 2.padding:填充 margi ...

  3. Samy XSS Worm之源码讲解

    说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...

  4. SQLite中的日期基础

    SQLite包含了如下时间/日期函数: datetime().......................产生日期和时间 date()...........................产生日期 t ...

  5. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 8

    Refer :http://www.cnblogs.com/mengfanrong/p/3745475.html Righ click on your project > properties ...

  6. 如何实现Windows Phone代码与Unity相互通信(插件方式)

    原地址:http://www.cnblogs.com/petto/p/3915943.html 一些废话 原文地址: http://imwper.com/unity/petto/%E5%A6%82%E ...

  7. Sqli-labs less 34

    Less-34 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理.由上面的例子可以看到我们的方法就是将过滤函数添加的 \ 给吃掉.而get型的方式我们是以url形式提交 ...

  8. Javascript 正则表达式_5

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. XCODE快捷键个人总结

    1.在方法名上用CMD+左键 可以查看完整的方法名

  10. 机器学习之多变量线性回归(Linear Regression with multiple variables)

    1. Multiple features(多维特征) 在机器学习之单变量线性回归(Linear Regression with One Variable)我们提到过的线性回归中,我们只有一个单一特征量 ...