昨天调试项目时,突然发现如下消息: QObject::connect: Cannot queue arguments of type 'ERROR_LEVEL' (Make sure 'ERROR_LEVEL' is registered using qRegisterMetaType().) 其中ERROR_LEVEL只是我定义的枚举类型即enum ERROR_LEVEL.然后在Qt的信号-槽函数的参数中使用了这个枚举型,在发送信号时就出现了上述警告.上面警告的大概意思是信号队列中无法使用ER…
昨天调试项目时,突然发现如下消息: QObject::connect: Cannot queue arguments of type 'ERROR_LEVEL' (Make sure 'ERROR_LEVEL' is registered using qRegisterMetaType().) 其中ERROR_LEVEL只是我定义的枚举类型即enum ERROR_LEVEL.然后在Qt的信号-槽函数的参数中使用了这个枚举型,在发送信号时就出现了上述警告.上面警告的大概意思是信号队列中无法使用ER…
一般情况下信号槽直接连接方式不会出现问题,但是如果信号与槽在不同线程或Qt::QueuedConnection方式连接,可能会在连接期间报以下类似问题,如: QObject::connect: Cannot queue arguments of type 'ThreadSignal' (Make sure 'ThreadSignal' is registered using qRegisterMetaType().) 或者 QObject::connect: Cannot queue argum…
概述查看Qt源码可知,Q_INVOKABLE是个空宏,目的在于让moc识别. 使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起. Q_INVOKABLE与QMetaObject::invokeMethod均由元对象系统唤起.这一机制在Qt C++/QML混合编程,跨线程编程,Qt Service Framework 以及 Qt/ HTML5混合编程以及里广泛使用. QMetaObject::invokeMethod的声明如下,还有几个inline重载: s…
http://www.cnblogs.com/hellovenus/p/5582521.html 一.元对象 元对象(meta object)意思是描述另一个对象结构的对象,比如获得一个对象有多少成员函数,有哪些属性.在Qt中,我们将要用到的是QMetaObject这个类. 元对象系统基于以下3点: 以QObject作为基类 类声明的私有区域中,Q_Object宏指令使我们能够使用元对象的特性,比如动态属性.信号.槽等 元对象编译器(Meta-Object Compiler  moc)为QObj…
Qt 元对象系统(Meta-Object System) Qt的元对象系统基于如下三件事情: 类:QObject,为所有需要利用原对象系统的对象提供了一个基类. 宏:Q_OBJECT,通常可以声明在类的私有段中,让该类可以使用元对象对象的特性,比如动态属性,信号和槽. 编译器:元对象编译器(moc)为每个QObject子对象自动生成必要的代码来实现元对象特性. moc工具会读入C++的源文件,如果它发现了一个或者多个声明了Q_OBJECT宏的类,它就创建另一个C++源文件,为每个类生成包含元对象…
最新更新请访问: http://denghejun.github.io   前言 今天重新看了下关于CLR基元类型的东西,觉得还是有必要将其记录下来,毕竟这是理解CLR成功 之路上的重要一步,希望你也和我一样. 基元类型 编译器直接支持的数据类型称之为基元类型,针对那些程序员自定义的类型而言.所有基元类型 直接映射到FCL(Framework class library)中存在的类型:比如C#中int直接映射到System. Int32类型,且在编译为IL(中间语言)时,他们将会是一模一样的:…
编程语言的基元类型 编译器直接支持的数据类型称为基元类型.基元类型直接映射到Framework类库中存在的类型.例如:C#中的int直接映射到System.Int32类型.下表给出了C#基元类型与对应的FCL类型 C#规范中写道从风格上说,最好是使用关键字,而不是使用完整的系统类型名称,但作者认为最好使用FCL类型名称 许多开发人员纠结于到时使用string还是String.由于C#的string关键字直接映射到System.String,所以两者没有区别.有些人说应用程序在32位操作系统运行,…
http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架类库FCL存在着直接的映射关系. string和String? 面试的时候曾经被问到过这个问题,C#中的基元类型string实际上对应了System.String(FCL)类型,所以两者使用的时候没有什么不同. 类型转换 编译器能够在基元类型之间进行显式或隐式转换.如果转换是安全的,也就是转换过程不…
5.1 基元类型 编译器直接支持的数据类型称为基元类型(primitive type). 以下4行到吗生成完全相同的IL int a = 0; //最方便的语法 System.Int32 b = 0; //方便的语法 int c = new int(); //不方便的语法 System.Int32 d = new System.Int32(); //最不方便的语法 C#基元类型与对应的FCL类型 C#中的基元类型 FCL类型 是否与CLS兼容 描述 sbyte System.SByte N 有符…
第二遍看这本书,决定记录一下加深印象. 1,基元类型 什么事基元类型?基元类型是直接映射到FrameWork类库(FCL)中存在的类型,编译器直接支持的数据类型.比如int直接映射到System.Int32类型,就像是添加了using应用:using sbyte=System.SByte. C#基元类型 FCL类型 说明 sbyte System.SByte 有符号8位 byte System.Byte 无符号8位 short System.Int16 有符号16位 ushort System.…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
 基元类型和FCL类型 FCL类型就是指Int32这种类型,这是CLR支持的类型. 而基元类型就是指int这种类型,这是C#编译器支持的,实际上在编译后,还是会被转为Int32类型. 而且学过C的朋友肯定记得,int在32位机器和64位机器字节数可能不同,但是C#.NET里int就是表示Int32. 因为在基元类型和FCL类型之间,有一个一一对应的映射关系.另外注意dynamic实际上对应的类型就是Object,只是说C#编译器允许用简单的语法让dynamic变量参与动态调度. 表达式由字面量构…
首先看一下.NET 中的基元类型,如下表: C# Type | .NET Framework Type -------------| ---------------------- bool | System.Boolean byte | System.Byte sbyte | System.SByte char | System.Char decimal | System.Decimal double | System.Double float | System.Single int | Sys…
原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方法GetHashCode,它能获取任意对象的Int32哈希值. 如果你重写了Equals方法,那么还应重写GetHashCode方法.因为在System.Collection.Hashtable类型.System.Collections.Generic.Dictionary类型以及其他一些集合实现中…
原文:[CLR via C#]5.1 基元类型 某些数据类在开发中非常常用,以至于许多编译器允许代码已简化的语法来操作它们.例如可以使用以下语法来分配一个整数: System.Int32 a = new System.Int32(); 当然,你肯定不愿意使用这种语法,C#允许使用如下所示的语法: int a = 0; 这种语法不仅增强代码的可读性,而且生成的IL代码和是有System.Int32时生成的IL代码是完全一致的. 编译器直接支持的数据类型称为基元类型(primitive type).…
一.基元类型 . 引用类型 和 值类型的区别: 1.基元类型(primitive type):编译器直接支持的数据类型: 基元类型 直接映射到 FCL 中存在的类型. C# 小写是基元类型,例如:string ,  大写是FCL类型,例如String,  基元类型直接映射到FCL类型,所以这两者之间没有区别,一模一样,不用纠结使用哪种方式了. 支持 直接使用FCL类型, 不使用基元类型, Float 对应 Single FCL类型: dynamic 对应  System.Object FCL类型…
C# 中的基元类型.值类型和引用类型 1. 基元类型(Primitive Type) 编译器直接支持的类型称为基元类型.基元类型可以直接映射到 FCL 中存在的类型.例如,int a = 10 中的 int 就是基元类型,其对应着 FCL 中的 System.Int32,上面的代码你完全可以写作System.Int32 a = 10,编译器将生成完全形同的 IL,也可以理解为 C# 编译器为源代码文件中添加了 using int = System.Int32. 1.1 基元类型的算术运算的溢出检…
=========(CLR via C#阅读笔记)======== 基元类型(primitive type): 基元类型也不做过多的解释,举个例子即可清晰的辨别 在java里曾使用过Sting s="java"; 定义字符串,然后就会觉得很诧异,为啥是大写开头,我写C#,一直都是 string ,int ,double,float等等小写开头,这时候,来了解基元类型方可解惑. ; System.Int32 a=; int a=new int(); System.Int32 a=new…
C#编程中,初始化一个整数有两种方式: (1).较繁琐的方法,代码如下: Int32 a = new Int32(); (2).极简的方法,代码如下: ; 对比两种方法,分析如下: 第一种:过于繁琐,但是是标准的初始化一个整数的方式 第二种:增强代码可读性,且生成的IL代码与使用第一种方式的一样.支持这种方式声明的数据类型统称为"基元类型". "基元类型"直接映射到Framework(FCL)中存在的类型.如:在用"基元类型"int初始化一个整数…
5.1 编程语言的基元类型 c#不管在什么操作系统上运行,int始终映射到System.Int32; long始终映射到System.Int64 可以通过checked/unchecked操作符/语句打开或关闭溢出检查,如: byte b = 100; b = checked((byte)(b + 200)); uint invalid = unchecked((uint)(-1)); checked { b += 200; } 在checked操作符或语句中调用方法,不会对该方法造成任何影响,…
1. Buffer.ByteLength:计算基元类型数组累计有多少字节组成. 该方法结果等于"基元类型字节长度 * 数组长度" , , }; , , }; , , }; Console.WriteLine(Buffer.ByteLength(bytes)); // 1 byte * 3 elements = 3 Console.WriteLine(Buffer.ByteLength(shorts)); // 2 byte * 3 elements = 6 Console.WriteL…
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSet使用及Qt自定义类型使用QHash等算法     本文地址:http://techieliang.com/2017/12/580/ 文章目录 1. 介绍 2. 简单范例 3. 自定义类型 1. 介绍 Qt提供的一个单值的数学集合的快速查找容器,使用方式与QList相同,但其内元素不会有重复.详细说明见 官方文档 注意,此容器实现方式是基于哈希表,而不是红黑树,若使用自定义类必须提供对…
Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指定的类型,结果,发现执行EF在查询的时候,不能支持equal,只能用==,理由很简单,因为equal是object的方法,虽然所有的类都是object的子类,但是ef不支持复杂类型的直接检索,只能用简单类型,比如常用的string,int,guid,这些,都可以做==,也可以用来检索.但是比如Per…
1.一些开发人员说应用程序在32位操作系统上运行,int代表32位整数:在64位操作系统上运行,int代表64位整数.这个说法是完全错误的.C#的int始终映射到System.Int32,所以不管在什么操作系统上运行,代表的都是32位整数. 2.checked.unchecked来检查.不检查表达式是否产生溢出:C#默认关闭溢出检查: UInt32 invalid=unchecked((UInt32)(-1)); -----------------------------------------…
Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是实际当中关键字更常用,FCL类型的写法太繁琐了.特别是你不用过多考虑和其他语言交互的时候,只使用C#的时候.所以这一点上我还是不同意作者的看法. 类型的隐式转换和显示转换过程中的可能存在的问题.checked,unchecked;来检查溢出: CLR并不认为Decimal是基元类型,所以执行速度要慢…
一.什么是基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们.例如,可以使用以下语法来分配一个整数: System.Int32 a = new System.Int32(); 但你肯定不愿意使用这种语法来声明并初始化一个整数,因为实在是太繁琐了.幸运的是,包括C#在内的许多编译器都允许换用如下所示的语法: int a = 0; 这种语法不仅增加了代码的可读性,而且生成的IL代码与使用System.Int32时生成的IL代码是完全一样的.这种编译器直接支持的数据类型称为…
编程语言的基元类型 编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到framework类型(fcl)中存在的类型. 下表列出fcl类型 从另一个角度,可以认为C#编译器自动假定所有源代码文件都添加了一下using指令: c#编译器非常熟悉基元类型,会在编译代码时应用自己的特殊规则,具体地说,c#编译器支持与类型转换.字面值以及操作符有关的模式. Int32 i = ; Int64 l = i; //从int32隐式转换为int64 Single s = i…
基元类型(primitive type): 编译器直接支持的数据类型称为基元类型(primitive type). string 与 String: 由于C#中的string (一个关键字)直接映射到System.String (一个FCL类型),所以两者没有区别,都可以使用. 但是在C#中int始终映射在System.Int32,所以不管在 64操作系统还是32位操作系统上,代表的都是32位整数. 在C#中long映射到的是System.Int64,但是在其他编程语言中,long可能映射到In…
对基元类型执行的许多算术运算都可能造成溢出: Byte b = ; b = (Byte) (b + ); // b 现在包含 44(或者十六进制值 2C) 重要提示:执行上述算术运算时,第一步要求所有操作数都扩大为 32 位值(或者 64 位值,如果任何操作数需要超过 32 位来表示的话).所以, b 和 200(这两个值都不超过 32 位) 首先转换成 32 位值,然后加到一起.结果是一个 32 位值(十进制 300,或十六进制 12C).该值在存回变量 b 之前,必须转型为一个 Byte.C…