按 ‘ 程序设计 ’ 分类归档

Ubuntu11.10安装QtSDK卡死的问题

最近在玩32位的Ubuntu 11.10,在安装QtSDK1.1.4时会卡死。起初以为是Unity的问题,于是装了Gnome 3,再安装依然是卡死。从网上查到的资料看来,貌似是由于QT的安装程序与Ubuntu的主题style之间存在不和谐的关系导致的,解决方法有两种:

一是安装时使用sudo来执行安装程序,即运行sudo ./_SDK_Lin32_offline_v1_1_4_en.run

二是在运行安装程序时添加参数-style cleanlooks,即运行./Qt_SDK_Lin32_offline_v1_1_4_en.run -style cleanlooks

WP模拟器无法启动:Windows Phone Emulator is doing complete OS boot

很久没写东西了。其实并不是没什么可以写的,而是一直琢磨着换个主题,一直想等主题做好了再写新文章。只可惜新主题难产了,有些东西怕忘记还是趁早记下来的好……

这两天Nokia Lumia系列的Windows Phone手机风头正劲,于是乎我手痒想装个模拟器看看Windows Phone的系统好玩不好玩。环境搭起来很简单,我原本就有Visual Studio 2010,只需要更新一下装个SP1,然后在微软网站下载了Windows Phone SDK的在线安装,漫长的等待之后就安装成功了~~

SDK安装成功后新建Windows Phone游戏的工程尝试一下,但模拟器无法正常运行,启动后一直处于” Emulator is doing complete OS boot“的状态,按Windows Phone Developer Tool 的Release Notes 发布说明中关于硬件的要求检查了遍,2GB的内存,支持DX11,WDDM1.1的显卡驱动,完全满足要求啊。网上关于这个问题的答案也基本都是说这个硬件要求的。

后来在MSDN上的一条回复中找到了真正的答案…我用的本本Acer 3830TG是双显卡的,然后我在设置里面把显卡设置成了使用Nvidia卡。这个设定导致了此问题的产生。解决方法如下:

1. 进入”NVIDIA控制面板”(从”控制面板”进入,或者通过桌面右键菜单进入)
2.在右侧列表中选择“管理3D设置”
3.然后把全局设置改成“自动选择”

参考:http://social.msdn.microsoft.com/Forums/zh-TW/wp7msdntaiwan/thread/f1729cb5-2838-4ac6-8078-71b0a6d307a0/

SVN修改已提交版本的Log

在工作中一直是使用svn进行项目的版本控制的,有时候由于提交匆忙,或是忘了添加Log,或是Log内容写的有错误。今日遇到此类情况,想要在查看项目的日志时添加log或是修改log内容,遇到如下错误:
Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
显然此情况是svn服务端设置的问题,版本在提交后不允许修改log。需要在服务端添加一个hook来允许log的修改。我用的服务器是Windows下的VisualSVN Server,在库的属性页面的Hooks选项卡下找到Pre-revision property change hook(参考图1),双击修改其内容。
猛击阅读全文

svn服务器限制IP访问

在自己机器上用VisualSVN架了个svn服务器,最初只是通过用户名密码来限制无关人员访问。近期考虑到安全问题,决定限制访问ip,只允许部分ip地址的用户访问svn。找VisualSVN的设置,里面有个Server Binding,发现不是这么用的…然后看了下VisualSVN的安装目录,它是用的Apache~~再然后,就没有然后了~~~

配置步骤如下:

1) 修改apache配置文件,编辑VisualSVN Server\conf\httpd.conf(如果你直接使用的apache搭建的服务器,则配置文件位于apache\conf\httpd.conf),在文件中添加下面语句,使用这个模块的功能

LoadModule authz_host_module bin/mod_authz_host.so

2) 在<Location //>(根据你自己的配置情况,也有可能是<Directory />之类的,就是svn的路径配置那块)中添加

Order deny,allow

allow from 192.168.1.30/28 #相当于192.168.1.30/255.255.255.240,允许16~31段访问

deny from all

allow和deny的写法参照apache的官方文档:http://httpd.apache.org/docs/2.2/en/mod/mod_authz_host.html

svn服务器变更后客户端的解决方案

最近实验室的svn服务器上几个几乎不再用的项目的Repositories更改了名字,而以前check out的工作目录中依然记录着旧的svn地址,如何从将工作目录的svn地址更改到新的svn地址呢?

解决方法很简单,当svn服务器更换了ip地址,或者服务器上的Repository改名之后,客户端需要在工作目录的根目录上点右键 ->TortoiseSVN -> Relocate.其他的SVN客户端类似,只需将工作目录Relocate一下即可。

STL vector中的元素删除

删除vector中的元素,最容易的方法就是使用vector的erase()函数。

1
2
3
4
5
6
7
8
vector vec;
for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
    if(某条件成立)
        iter = vec.erase(iter);
    else
        iter ++;
}

如果要清空vector中的元素,可以使用erase()循环删除,也可以用clear()函数。

1
2
3
4
5
6
for ( vector::iterator iter = vec.begin(); iter! = vec.end();)
{
        iter = vec.erase(iter);
}
//或者直接clear
vec.clear();

需要注意,如果vector中存储的元素是指针,那么erase()或者clear()并不会删除指针指向的对象或者内存空间,要小心内存泄漏问题。

此外,还需要注意的是,erase()函数虽然会删除指定位置的元素,但是元素所占用的内存空间并不会被释放掉,也就是说,被删除的元素所占的内存空间还是被vector占有的,而没有被系统回收。
要解决这个问题可以使用vector中的swap()函数。
假设vector vec起初有1000个元素,后来删掉500个,那么要释放掉那500个int所占的空间,可以这样:

1
2
3
4
5
6
7
8
9
std::vector(vec).swap(vec);
//上面这行代码相当于下面两行
//即先产生一个跟vec中现有内容相同且占用空间刚好满足其大小的vector tmp
//然后把tmp与vec对换
//当出了tmp的作用域(例如下面的一对大括号)后,tmp所占的空间就被释放掉了
{
    std::vector tmp(vec);
    tmp.swap(vec);
}

编译器对const常量的处理

先来看一段代码,这是今天师兄贴给的。

1
2
3
4
5
6
7
8
9
10
#include <stdio .h>
int main()
{
	const int i = 10;
	int* pi = const_cast<int *>(&i);
	*pi = 100;
	printf("%d %d\n", i, *pi);
	return 0;
}
</int></stdio>

代码运行的结果是什么呢?按道理讲,i是一个const类型的常量,pi指向了存储i的内存空间的地址,然后通过pi改变了内存中的这个值,那么,结果应该是“100 100”?
可以自己跑了这段代码之后发现,输出的结果是“10 100”,这是为什么呢?
猛击阅读全文

QLineEdit实现“命令提示符”效果

又是n久木有更新…罪过罪过…
今天讲个在做项目过程中遇到的问题。大家应该都知道Windows的Console或者*nix里面的终端,在里面输入命令的时候,每行前面都会有一个“提示符”,如:

PS F:\> ls

ls命令左侧的部分就是提示符,它是一直存在且用户无法更改的。

在QT里面想实现一个带提示符的单行命令输入组件该怎么做呢?

提到单行命令输入组件,最容易想到的是QLineEdit,但是QLineEdit不像QSpinBox一样提供设置Prefix和Suffix的功能,那就只好自己改造一下QLineEdit了。
大体的思想是这样的:在QLineEdit中加一个字符串保存“命令提示符”,与用户输入的字符串连接后组成显示文本。当用户输入、删除、选择文本时,均不能对QLineEdit中显示的“命令提示符”字符串进行操作。需要注意的是,在QLineEdit中,如果用户选中了某段文本,然后再按键盘输入内容,那么选中的文本会被输入的内容替换掉
猛击阅读全文

Qt4.5与VS2008/VS2005的集成开发环境的安装配置

在Windows下用QT做开发,编译器可以用mingw的gcc/g++,也可以用VS。使用mingw开发QT程序基本不用配置。由于我这的工作IDE是VS,所以需要搭建VS+Qt的工作环境。
在网上有一大堆关于怎样把Qt集成到VS中的文章。有的写的很简单,有几篇较为详细的。这一两个月的时间我也装了在Windows下装了n次Qt了,在这里写下自己的安装配置过程,以及安装中遇到几个问题,算是备忘吧,也顺便分享一下~
一、安装编译QT
1、首先得有VS,2005和2008都可以,VC++必须装。我这是2005 Professional版的,据说用Express版的qt--addin装不上去(2008 Professional版的我也试过,比用2005装还要顺利一些……)。

2、去Qt官网(http://qt.nokia.com/)下载Qt SDK for Windows,一个exe文件。(网上有人讲去下载src,不需要的,往后看就知道了O(∩_∩)O~)下载完成后运行安装,安装目录应该是随便的,不过路径中最好不要有中文和空格,防止出现莫名其妙的问题。我的安装路径是D:\\,QT的内容在D:\\2009.03\qt下面。其中,src目录下面是QT的源代码。

猛击阅读全文

fatal error LNK1103: debugging information corrupt; recompile module

产生:
在VS2005安装SP1之后,build工程过程中出现错误。错误出现在build过程的link阶段,编译正常。

错误信息:
1>Linking…
1>qtmaind.lib(qtmain_win.obj) : fatal LNK1103: debugging information corrupt; recompile module

解决方法:
在网上找了很久,大伙都是讲的调试VC6工程时出现这个错误的情况。是要把Tool -> Options -> Directories(VC6是这个,VS的是Tools -> Options -> Projects and Solutions -> VC++ Directories),将Include files和Library files中SDK的顺序放到最下边或者直接删掉较新的SDK。此方法对我遇到的错误无效。

在微软网站找到这个http://support.microsoft.com/kb/974193/。说错误的原因是链接器(linker)的bug导致了这个错误的产生。要解决这个问题只要关闭工程的程序数据库(program database,PDB)文件的生成即可。操作如下:

在Solutions Explorer中选中工程,点右键选Properties -> Linker -> Debugging,把Generate Debug Info选项改为No.这样就OK了~

无觅相关文章插件,快速提升流量