Lepus经历收获杂谈(一)——confirm features的小工具
------记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; }
2、对于C++中的类,结构体,共用体等具有成员函数或变量的数据类型(对象)时,如果存在对象a,而对象中有成员b,那么可以使用a.b的方式,使用对应的成员。
如果存在变量p,指向a, 即p = &a, 这时可以用p->b来使用成员b。
即,->操作符是用于带成员的类型对应指针上,用来提取成员变量或函数用的。
p->b等同于(*p).b。
对于任意的对象a,写作(&a)->b也是可以的,不过很少有这样写。
3、关于智能指针:
Lepus经历收获杂谈(一)——confirm features的小工具的更多相关文章
- Lepus经历收获杂谈(二)——QT
QT简介及相关使用指南 1.QT Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框 ...
- 仿javascript中confirm()方法的小插件
10天没有写博客了,不知道为什么,心里感觉挺不舒服的,可能这是自己给自己规定要去完成的事情,没有按照计划执行,总会心里不怎么舒服.最近事情挺多的,终于今天抽空来更新一下博客了. 今天写的是一个小插件. ...
- [杂谈] 一个关于 as 的小测试
代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 procedure TForm1.Button1Click(Sender: TObject); va ...
- Linux杂谈: gcc对结构体大小的默认处理方式
1. 发现问题 最近在编写代码过程中发现,对一个结构体进行 sizeof 操作时,有时候大小是填充过的,有时候又没有填充. 那么,如果在代码中没有显示的指定要求编译器进行对齐时,gcc的默认处理是怎样 ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- 专业上的常用的工具和类库集 By 老衣
Visual Studio 2013 扩展 CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实时提供代码复杂度的报告,以便帮助开发人员降低代码复杂度.提高代码质量. C ...
- 转《UNIX编程艺术》读书心得
花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...
- PhyLab2.0需求与功能分析改进文档(NABCD)
PhyLab1.0需求规格说明文档 1. 概述 1.1 项目概述 软剑攻城队小组于2015学年开发了PhyLab物理实验网站,一经发布好评如潮.网站的核心功能是提供预习报告和自动数据处理,而后加入了论 ...
随机推荐
- map线程
来看看map线程到底是如何运行的 很早就知道一个map是一个线程,以后有可能改成一个map一个进程,那就先来看看一个map一个线程是如何运作的 其实刚开始整个服务器就是两个线程,但发现这样服务器支持的 ...
- [百度空间] [note] pointer to member is a POD type
C++03 3.9-10: 1 Arithmetic types (3.9.1), enumeration types, pointer types, and pointer to member ty ...
- Samy XSS Worm之源码讲解
说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...
- .NET设计模式(5):工厂方法模式(Factory Method)(转)
工厂方法模式(Factory Method) ——.NET设计模式系列之五 Terrylee,2004年1月2日 概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实 ...
- Android 4.4 KitKat, the browser and the Chrome WebView
Having V8 as the JavaScript engine for the new web view, the JavaScript performance if much better, ...
- Codeforces 475D CGCDSSQ(分治)
题意:给你一个序列a[i],对于每个询问xi,求出有多少个(l,r)对使得gcd(al,al+1...ar)=xi. 表面上是询问,其实只要处理出每个可能的gcd有多少个就好了,当左端点固定的时候,随 ...
- 知问前端——创建header区
创建界面 我们首先要设计一个header,这个区域将要设计成永远置顶.也就是,往下拉出滚动条也永远在页面最上层可视区内.在header区,目前先设计LOGO.搜索框.按钮.注册和登录即可. 项目的大致 ...
- tvm install
一.系统需求:1.可以访问互联网2.关闭防火墙和selinux 二.安装步骤(进入软件包所在目录):1.rpm -ivh daemontools-0.76-1.el6.x86_64.rpm2.yum ...
- PLSQL:plsql中文乱码,显示问号
PLSQL执行sql语句,不识别中文,输出的中文标题显示成问号???? 1. 登陆plsql,执行sql语句,输出的中文标题显示成问号????:条件包含中文,则无数据输出
- http://blog.sina.com.cn/s/blog_5b9b4abe01017638.html
http://blog.sina.com.cn/s/blog_5b9b4abe01017638.html