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物理实验网站,一经发布好评如潮.网站的核心功能是提供预习报告和自动数据处理,而后加入了论 ...
随机推荐
- MVC 基础知识
一. MVC架构1.MVC模式是一种严格实现应用程序各部分隔离的架构模式.隔离:分离关注点,松耦合2.模型(Model) 代表着核心的业务逻辑和数据.模型封装了域实体的属性和行为3.视图(View) ...
- Leetcode#123 Best Time to Buy and Sell Stock III
原题地址 最直观的想法就是划分成两个子问题,每个子问题变成了:求在某个范围内交易一次的最大利润 在只能交易一次的情况下,如何求一段时间内的最大利润?其实就是找股价最低的一天买进,然后在股价最高的一天卖 ...
- volatile关键字的使用
(简要概括:volatile变量有两个作用:一个是告诉编译器不要进行优化:另一个是告诉系统始终从内存中取变量的地址,而不是从缓存中取变量的值) 一.前言 1.编译器优化介绍: 由于内存访问速度远不及C ...
- 远程数据源Combobox
Ext.define('bookInfo', { extend: 'Ext.data.Model',//新类继承自model fields: [{ name: 'b ...
- PHP 使用 Redis
PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PH ...
- javascript 注意事项
1.submit input 标签的 type里的submit是提交表单的按钮 提交时应注意 为 标签加上 “name=""”字段和form标签,才能达到想要的效果 2.正则表达 ...
- Razor视图引擎 语法学习(一)
ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架: ASP.NET约定优于配置:基本分为模型(对实体数据 ...
- light oj 1205 - Palindromic Numbers 数位DP
思路:搜索的时候是从高位到低位,所以一旦遇到非0数字,也就确定了数的长度,这样就知道回文串的中心点. 代码如下: #include<iostream> #include<cstdio ...
- (10)nehe教程4--旋转
旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 上一课中我教给您三角形和四边形的着色.这一课我将教您如何将这些彩色对象绕着坐标轴旋转.其实只需在上 ...
- hdu 1669(二分+多重匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...