当前位置:  编程技术>c/c++/嵌入式
本页文章导读:
    ▪Qt实例1 - 查找框(2)实现功能      上一节我们完成了搜索框基本的界面,但是光有外表是没用的,华而不实最终将会遭人唾弃。那我们还差哪些功能?1.搜索按钮可以做成填了内容才启用,这样用户体验会好一点。2.用tr实现国.........
    ▪统计元素个数-list秒用      在python俱乐部里,看到的一个用法,觉得不错,收下了。#encoding:utf8mylist = [2,2,2,22,2,2,3,3,3]myset = set(mylist)for item in myset:    print mylist.count(item),"of",ite.........
    ▪[C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)      作者:zyl910   以前我曾为了让VC++等编译器支持C99的整数类型,编写了同名的stdint.h、inttypes.h来智能处理(http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html)。现在将其升级到v1.01版。一、.........

[1]Qt实例1 - 查找框(2)实现功能
    来源:    发布时间: 2013-10-14
上一节我们完成了搜索框基本的界面,但是光有外表是没用的,华而不实最终将会遭人唾弃。那我们还差哪些功能?

1.搜索按钮可以做成填了内容才启用,这样用户体验会好一点。

2.用tr实现国际化,我们用中文作为例子。

3.真正地实现文本查找。

针对上面的需求我们相应地给出解决方案:

1.1 可以在初始化的时候先把搜索按钮禁用,用setEnabled(false)来实现。

1.2 当用户在搜索框输入了内容的时候,搜索按钮自动启用,可以用信号槽connect一下实现(信号槽这里不赘述,此系列文章全都是讲实用,就像李小龙说的:一位老师从来就不是真理的施舍者,而是带领你让你自己去领悟真理。)

在init方法里searchButton实例化之后加一行:

//刚开始先禁用搜索按钮,等输入了搜索内容才启用
searchButton->setEnabled(false);
connect(searchLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableSearchButton(const QString &)));

在dialog.cpp定义开启搜索按钮的方法:

void FindDialog::enableSearchButton(const QString &text){
searchButton->setEnabled(!text.isEmpty());//判断是当文本不为空的时候启用
}

此时我们点击运行,搜索按钮是灰色的,这代表他不可用,我们输入内容,他变色了(额,别想歪了),好,功能1搞定。下面进入功能2:

 

2.1 打开dialog.pro下面加一行:TRANSLATIONS+=china.ts ,这个ts文件就是等下我们要去写中文的。

2.2 打开qt的命令行工具(一般在开始菜单里面可找到),进入项目目录,执行lupdate。下面是我本机的命令,请大家按照自己的环境改一下:

f:
cd Qt/dialog
lupdate dialog.pro

执行完之后他生成了一个china.ts, 并且会告诉你有多少个新词是没有翻译过的。你可以用记事本打开这个ts文件看一下,哦,原来是xml。

可以看到会有这种语句:<translation type="unfinished"></translation>,乍一看,这应该就是要填写中文的地方吧。我们先试试看行不行:

<source>&amp;Search</source>
<translation type="unfinished">搜索</translation>

保存,运行。没用,那该怎么整?呵呵,Qt给我们提供了一个工具,Qt Linguist,听说用他来打开ts文件再修改会简单点呢!

我们在开始菜单找到这个工具运行,把刚才的ts文件直接拖进去。弹出一个窗口,自行调节一下选项,一般默认就好了。


    
[2]统计元素个数-list秒用
    来源:    发布时间: 2013-10-14
在python俱乐部里,看到的一个用法,觉得不错,收下了。
#encoding:utf8

mylist = [2,2,2,22,2,2,3,3,3]
myset = set(mylist)

for item in myset:
    print mylist.count(item),"of",item,"in list"


SunRise_at 2013-01-10 16:00 发表评论

    
[3][C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)
    来源:    发布时间: 2013-10-14

作者:zyl910

 

  以前我曾为了让VC++等编译器支持C99的整数类型,编写了同名的stdint.h、inttypes.h来智能处理(http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html)。现在将其升级到v1.01版。


一、改动说明

1.1 包含目录问题

  在1.00版,我编写的头文件与系统头文件同名,利用“#include "XXX"”与“#include <XXX>”的区别,使其智能使用系统头文件。
  这样做的优点是基本不需改动代码(只需将“#include <stdint.h>”改为“#include "stdint.h"”),而且易读性好,一看就知道是C99整数类型。

  后来使用时发现该方案存在包含目录问题——我的stdint.h、inttypes.h不能放在项目include目录中。
  这是因为“#include <XXX>”时会优先检查项目include目录,而后才是系统include目录。
  如果将我的stdint.h、inttypes.h放在项目include目录中,会导致循环引用,无法定位到系统头文件。
  所以,只能将我的stdint.h、inttypes.h放在项目src目录。
  当项目较大时,会建立多级子目录来存放源码。这时只有将stdint.h、inttypes.h复制到各个子目录中,管理起来不方便。

  于是我决定将我的stdint.h、inttypes.h分辨改名为auto_stdint.h、auto_inttypes.h,这样就可以放在项目include目录中了。缺点是使用时麻烦一点,要包含auto_stdint.h、auto_inttypes.h。

  既然文件改名了,宏也要改名——
__AUTO_STDINT_H_INCLUDED(原_STDINT_H_ALL_)。
__AUTO_STDINT_H_USESYS(原_STDINT_H_SYS_)。
__AUTO_INTTYPES_H_INCLUDED(原_INTTYPES_H_ALL_)。
__AUTO_INTTYPES_H_USESYS(原_INTTYPES_H_SYS_)。


1.2 编译器兼容性

  测试了 Visual C++ 2008。发现它果然不支持stdint.h与inttypes.h。
  测试了 Visual C++ 2012。发现它支持stdint.h,仍不支持inttypes.h。


二、全部代码

  文件清单——
auto_inttypes.h
auto_stdint.h
c99int.c
c99int.dsp
c99int.dsw
c99int_2003.sln
c99int_2003.vcproj
c99int_2005.sln
c99int_2005.vcproj
c99int_2008.sln
c99int_2008.vcproj
c99int_2010.sln
c99int_2010.vcxproj
c99int_2010.vcxproj.filters
c99int_2010.vcxproj.user
c99int_2012.sln
c99int_2012.vcxproj
c99int_2012.vcxproj.filters
c99int_bcb.bpf
c99int_bcb.bpr
c99int_bcb.res
makefile

2.1 auto_stdint.h

  全部代码——

////////////////////////////////////////////////////////////
/*
auto_stdint.h: 兼容C99标准的stdint.h
Author: zyl910
Blog: http://www.cnblogs.com/zyl910
URL: http://www.cnblogs.com/zyl910/archive/2013/01/10/c99int_v101.html
Version: V1.01
Updata: 2013-01-10

测试过的编译器--
VC: 6, 2003, 2005, 2008, 2010, 2012.
BCB: 6.
GCC(Linux): 4.7.0(Fedora 17).
GCC(Mac): llvm-gcc-4.2(Mac OS X Lion 10.7.4, Xcode 4.4.1).
GCC(MinGW): 4.6.2(MinGW(20120426)), 4.7.1(TDM-GCC(MinGW-w64)).


Update
~~~~~~

[2013-01-01] V1.01
* 检查了对VC2008、VC2012的兼容性. 确认VC2008不支持stdint.h.
* 为了避免包含目录问题,更名auto_stdint.h(原stdint.h).
* 更改宏名:__AUTO_STDINT_H_INCLUDED(原_STDINT_H_ALL_),__AUTO_STDINT_H_USESYS(原_STDINT_H_SYS_).

[2012-08-08] V1.0
* V1.0发布.
* 参考了 msinttypes-r26. http://code.google.com/p/msinttypes/
* 修正了 VC6编译C++程序时wchar.h会报错 问题.


*/
////////////////////////////////////////////////////////////

#ifndef __AUTO_STDINT_H_INCLUDED
#define __AUTO_STDINT_H_INCLUDED

// __AUTO_STDINT_H_USESYS: 编译器是否提供了<stdint.h>
#undef __AUTO_STDINT_H_USESYS
#if defined(__GNUC__) // GCC.
#define __AUTO_STDINT_H_USESYS
#elif defined(_MSC_VER) // MSVC. VC6至VC2008均没有, 从VC2010才支持的.
#if _MSC_VER >=1600 // VC2010
#define __AUTO_STDINT_H_USESYS
#endif // #if _MSC_VER >=1600 // VC2010
#elif defined(__BORLANDC__) // BCB. BCB6是支持的.
#if __BORLANDC__ >=0x0560 // BCB6
#define __AUTO_STDINT_H_USESYS
#endif // #if __BORLANDC__ >=0x0560 // BCB6
#else
#define _INTTYPES_H_SYS_ // 假设其他编译器支持C99.
#endif // __AUTO_STDINT_H_USESYS


#ifdef __AUTO_STDINT_H_USESYS
// 使用编译器提供的<stdint.h>
#include <stdint.h>
#else
// 采用自定义的stdint.h. 参考了 msinttypes: http://code.google.com/p/msinttypes/
#ifndef _MSC_STDINT_H_ // [
#define _MSC_STDINT_H_

#include <limits.h>

// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
// or compiler give many errors like this:
// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
//#ifdef __cplusplus
//extern "C" {
//#endif
//# include <wchar.h>
//#ifdef __cplusplus
//}
//#endif
// <zyl910>: 在VC6下测试时, 发现上面的方法会报告很多C2733错误. 还是直接include算了.
#include <wchar.h>

// Define _W64 macros to mark types changing their size, like intptr_t.
#ifndef _W64
# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
# define _W64 __w64
# else
# define _W64
# endif
#endif


// 7.18.1 Integer types

// 7.18.1.1 Exact-width integer types

// Visual Studio 6 and E
    
最新技术文章:
▪C++单例模式应用实例
▪C++设计模式之迭代器模式
▪C++实现动态分配const对象实例
▪C++设计模式之中介者模式
▪C++设计模式之备忘录模式
▪C++插入排序算法实例
▪C++冒泡排序算法实例
▪C++选择排序算法实例
▪C++归并排序算法实例
▪C++设计模式之观察者模式
▪C++中复制构造函数和重载赋值操作符总结
▪C++设计模式之状态模式
▪C++设计模式之策略模式
▪C++设计模式之访问者模式
▪C++设计模式之模板方法模式
▪C++实现下载的代码
▪C++模板之特化与偏特化详解
▪C++实现查壳程序代码实例
▪C语言、C++内存对齐问题详解
▪C语言、C++中的union用法总结
▪C++基于CreateToolhelp32Snapshot获取系统进程实例
▪C++中memcpy和memmove的区别总结
▪C++通过TerminateProess结束进程实例
▪C++内存查找实例
▪C++实现CreatThread函数主线程与工作线程交互的...
▪C++设计模式之桥接模式
▪C++中关键字Struct和Class的区别
▪C++设计模式之组合模式
▪C++ COM编程之什么是组件?
▪C++ COM编程之什么是接口?
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3