------记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. ios containerViewController

    - (void)replaceViewController:(UIViewController *)existingViewController withViewController:(UIViewC ...

  2. Intent.ACTION广播大全

    Intent.ACTION广播大全 Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播 Intent.ACTION_BATTERY_CHANGED ...

  3. 2013年优秀jQuery插件

    今天为大家推荐的是2013年的第一期,在这期里面十个jQuery插件涵盖了响应式的网格布局插件.图片放大插件.表单元素中自定义select插件,google 地图插件.文件拖放上传插件.tooltip ...

  4. 报名|「OneAPM x DaoCloud」技术公开课:Docker性能监控!

    如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Dock ...

  5. ArrayList和Iterator的用法

    import java.util.ArrayList; import java.util.Iterator; public class ArrayListTest { public static vo ...

  6. Codeforces 452E Three Strings(后缀自动机)

    上学期很认真地学了一些字符串的常用工具,各种 suffix structre,但是其实对后缀自动机这个部分是理解地不太透彻的,以致于看了师兄A这题的代码后,我完全看不懂,于是乎重新看回一些学习后缀自动 ...

  7. CPLD VS FPGA

    FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL.GAL.CPLD等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领域中的 ...

  8. x64 结构体系下的内存寻址

    欢迎转载,转载请注明出处:http://www.cnblogs.com/lanrenxinxin/p/4735027.html 在阅读NewBluePill源码的时候,看内存的那一块简直头疼,全是x6 ...

  9. JS之事件(一)

    事件:交互 异步监听,不是JS引擎监听的 一.绑定 1.ele.onxxxx(eg:onclick) = function (e) { //回调函数/事件处理函数 } 兼容性很好,但同一个事件仅能绑定 ...

  10. JQuery的第一天实战学习

    1.按照下面的工程来建: 2.新建UserVerify.html文件: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...