皮皮网

【viewgroup draw源码】【ios蓝牙 源码】【-68的源码】qcustom源码编译

2024-12-26 01:27:43 来源:live源码推荐

1.求CS1.6服务器架设
2.(建议收藏)QT实现字符串和枚举的源译相互转换,如何实现的码编?(深入源码分析)
3.QGraphicsView架构中绘制刻度尺
4.Qt中使用QWT绘制柱状图一类多种颜色

qcustom源码编译

求CS1.6服务器架设

       1@ 准备活动,嘿咻嘿咻^

       一、首先 你必须要有个高配置的源译电脑,如果是码编做服务器的话,最好内存是源译在M以上的机器,至于 内存 CPU 等对架设CS服务器的码编viewgroup draw源码影响!然后是源译要了解的是,你上网的码编网络结构,是源译通过 Modem+路由+交换机 上网,还是码编用 代理服务器+交换机 上网!

       二、源译CS的码编服务器端文件 由于现在CS1.6已经是比赛的版本了,所以偶就以1.6的源译为主,1.5的码编其实也一样的,但是源译会少了很多的特效,比如1.5就不支持中文等。 其实服务器端用的文件,并没多大的规定一定要用hlserver,也就是通常所说的服务器版,完全没那个必要,我下的那些所谓的服务器端,其实和1.6客户端的区别很小,也就是说,服务器端和客户端通用。所以大家完全没必要去一味追求服务器端。本文以版本来做服务器端为例(个人强烈推荐用ESAI版的cs1.6)。

       三、服务器端的安装和设置 运行下载回的服务器:按提示一步一步安装,建议最好用英文命名,不推荐用中文名,安装完成以后,先不要运行服务器程序,运行的话是进入游戏,而不是开始服务器!进入刚才安装的那个文件夹,找到Hlds.exe文件,创建一个快捷方式(ESAI版自动创建),然后把刚才那个快捷方式改一下名字,方便以后使用,偶改为Server,接下来是重点了。。。ios蓝牙 源码。请注意听了哦!打开SERVER快捷方式的属性,加入参数!那里就是服务器运行的时候必须要用到的启动参数,参数不同,服务器运行的效果也不同!以偶的为例,

       -game cstrike +servercfgfile server.cfg -nomaster -insecure -port +maxplayers +map de_dust2 +sv_lan 1 -console

       我一个一个解释好了:)

       -game cstrike 这个就是指定以反恐精英为游戏的Mod,如果不指定的话就是半条命的模式,听说也不错很好玩的哦,没玩过

       +servercfgfile server.cfg 这个就是指定服务器的配置文件,server.cfg这个文件放在cstrike下,后面偶会详细介绍一下该文件的

       -nomaster 加载这个参数就是让服务器不上WON认证,避免因为出国网络不通导致的服务器问题。

       -insecure 这个参数运行VAC反作弊插件的 1 为开启 0 为关闭!

       -port 指定服务器运行时候的端口,范围最好是在- 之间,据我的测试,局域网列表能刷出来的就是在这个范围内,当然,如果你想用来做比赛服务器不想让其他人进的话,你可以指定任意不被占用的端口。

       +maxplayers 这个参数是指定服务器最大进入玩家数,理论上最高能进人,有的地图最高只能进人,比如CS_italy 那些早期救人质的图都这样的。并不是说一定要以人为最大,这个要和你的网络状况及服务器配置相联系的,关于CPU 内存 网络带宽 之间的联系,请在论坛上搜索一下,或者到我的论坛去查找一下,只有人数合适了,你的服务器才能运行在快速稳定的状态!+map de_dust2 这个参数就是当服务器一开始运行的时候,运行的第一张地图,你可以该为任意的,但是要注意,最好以 cstrike\maps 目录下的地图,不然服务器会出错!此主题相关如下:图中,以bsp为结尾的-68的源码文件都是地图文件,注意:参数不用带文件全名,例如 de_dust2 就可以了, 没必要这样 de_dust2.bsp

       -console 控制台,如果不带这个参数的话,你架设好的服务器就不能在那个黑底白字的窗口上输入一些服务器命令

       +sv_lan 1 这个参数是控制该服务器是局域网还是战网的一个重要参数,当为 0 的时候,外网玩家也可以进入,当为 1 的时候,就只有局域网的玩家才能进入。如果要做面向公网和内网(不知道什么叫公网和内网的,请自己找资料学习),这个参数建议为 0 综合以上讲解,很容易了解,

       -**me cstrike +servercfgfile server.cfg -nomaster -insecure -port +maxplayers +map de_dust2 +sv_lan 1 -console 用这些个参数架设的服务器是一个CS1.6反恐精英,不通过WON验证,游戏端口为,人数最多为人,开始游戏地图为沙漠2,面向局域网的服务器!如果要面向内外网的话,去掉 -nomaster +sv_lan 1这两个参数就行了!

       参数配置正确了,就可以开始运行服务器了?别急,还没配置完全呢,还有一个比较重要的文件server.cfg还没配置呢!

       ------------------------------我是不华丽的分割线--------------------------------------------------

       2@ 准备做眼保健操吧……

       具体操作方法:进入安装目录的cstrike下,你可以看到一个Server.cfg文件,这个文件是一个文本文件,但是没和任何文本编辑软件关联,也就是说,当你打开的时候,系统会提示你打开方式,你可以选择用记事本打开。打开以后你会看到如下的信息:

       rcon_password "****"

       hostname "****网 **** CS1.6 Server"

       sv_maxspeed

       mp_autokick 0

       mp_autocrosshair 0

       mp_autoteambalance 0

       mp_buytime 0.

       mp_consistency 1

       mp_c4timer

       mp_fadetoblack 1

       mp_falldamage 1

       mp_flashlight 1

       mp_forcecamera 3

       mp_friendlyfire 1

       mp_freezetime

       mp_fraglimit 0

       mp_hostagepenalty 0

       mp_limitteams 6

       mp_logfile 1

       mp_logmessages 1

       mp_logdetail 3

       mp_maxrounds 0

       mp_playerid 0

       mp_roundtime 2.5

       mp_startmoney

       mp_timelimit

       mp_tkpunish 0

       mp_winlimit 0

       sv_aim 0

       sv_airaccelerate

       sv_airmove 1

       sv_allowdownload 0

       sv_clienttrace 1.0

       sv_clipmode 0

       sv_allowupload 0

       sv_cheats 0

       sv_gravity

       sv_maxrate

       sv_maxspeed

       sv_maxupdaterate

       sys_ticrate

       decalfrequency

       pausable 0

       log on

       decalfrequency

       edgefriction 2

       host_framerate 0

       exec listip.cfg

       exec banned.cfg

       哇靠!文件也太简单了吧,我记得以前还带解释的,现在这么都这样了呢?!

       不管他,反正我也看得懂是啥意思,我来解释好了!只解释一些常用的,没解释到的wap留言源码推荐用默认值。一般 0 为关 1 为开

       rcon_password "XXX" 这个是进入服务器的密码,如果不改的话,就相当于是一个带密码的服务器,推荐去掉 "" 里面部分

       hostname "ESAI—CS1.6 Server" 服务器的名字,这个当然要改的了,改为你想改的名字就行了

       sv_maxspeed 重力速度什么的,不推荐修改用默认的好了。。

       mp_autokick 0 自动踢人,当某位玩家因为一些其他的因素,常时间不动或者死机等,系统就会踢除该玩家,0 为关 1为开

       mp_autocrosshair 0 准心的大小自动调节,建议不要改

       mp_autoteambalance 0 双方自动平衡,建议开启,否则会出现两边队伍人数不平衡

       mp_buytime 0. 购买武器时间 以秒为单位,*0.=秒

       mp_c4timer C4爆炸时间,国际比赛好像是秒,推荐用这个值就行了

       mp_fadetoblack 1 死后黑屏,推荐改为0

       mp_falldamage 1 跌落损伤,这个不用改

       mp_flashlight 1 手电筒开启

       mp_forcecamera 3 死亡后视角 有0 1 2 3 三种模式,其中0 为视角固定模式 1 为仅限队友视角 2 为仅限队友第一视角 3为自由观看模式

       mp_friendlyfire 1 自伤模式,自己人能打自己人,不是比赛服的话推荐关掉

       mp_freezetime 开始买枪时候的静止不能行走的冻结时间,秒也太夸张了。3秒就够了

       mp_roundtime 2.5 每回合的时间,以分为单位,2.5为两分半钟,推荐改为3或者3.5 如果是死亡模式的话可以改为5

       mp_startmoney 开局资金,一般都是 最高可以改为 不推荐改!

       mp_timelimit 每个地图玩的时间 分钟合适了。如果改为0 的话就是不限制时间

       mp_tkpunish 0 Team Killer 就是上局杀了自己方人的,这局就会挨惩罚,好像是死一局,开启为1 要和之前那个mp_friendlyfire 1同时开启才用用

       mp_winlimit 0 当某方胜利多少局的时候换图,0 为关闭

       当然还有其他比较详细的介绍,我这个只是大概介绍一下,偶发偶服的出来给大家看看:

       sv_password ""

       rcon_password "feilang"

       hostname "龙华网城CS1.6服务器 [CD]"

       sv_maxrate

       sv_minrate

       sv_maxspeed

       // 暂停游戏 禁止0/允许1

       pausable 0

       // 作弊模式 关闭0/开启1

       sv_cheats 0

       // 自动瞄准 关闭0/开启1

       sv_aim 0

       // 战术手电 允许1/禁止0

       mp_flashlight 1

       // 脚步声 开启1/关闭0

       mp_footsteps 1

       // 高处落下伤害 开启1/关闭0

       mp_falldamage 1

       // 自动踢出不动的玩家 开启1/关闭0

       mp_autokick 1

       // 观察员模式 开启1/关闭0

       allow_spectators 1

       // 服务端设定游戏复位的时间,包括杀人数、武器、金钱和得分。设0不复位。马丁策略源码

       sv_restartround 2

       // 每局时间分钟

       mp_timelimit

       // 购买武器冻结时间 (0-)建议5秒以内。

       mp_freezetime 3

       // 每回合4分钟

       mp_roundtime 3

       //购买武器装备时间(0.-1.5)即秒-秒

       mp_buytime 0.

       // 炸弹倒计时时间 (-)

       mp_c4timer

       //开始游戏时的金钱数量(-)

       mp_startmoney

       // 死亡后视角 1本队队友 2原地 0无限制

       mp_forcechasecam 1

       // 死亡后视角模式 0自由跟随/1固定跟随

       mp_chasecam 1

       // 人物死亡后屏幕 不变黑0/变黑1

       mp_fadetoblack 0

       // 友军误伤 关闭0/开启1

       mp_friendlyfire 0

       // 手雷友军伤害 关闭0/开启1

       mp_friendly_grenade_damage 0

       // 杀害友军惩罚 0不惩罚/惩罚:杀害队友超过(1-n)人,下一回合自动死亡

       mp_tkpunish 0

       // 自动调整双方队伍平衡 不调整0/调整(1-n)个人

       mp_autoteambalance 1

       // 双方人数差超过n人即自动调整人数差异 0关闭

       mp_limitteams 2

       // 杀害人质惩罚 0不惩罚/惩罚:规定时间内伤害人质超过(1-n)人自动踢出

       mp_hostagepenalty 0

       // 杀人数、得分上限 无0/有(1-n),超过上限就换地图。

       mp_fraglimit 0

       // 胜利次数上限无0/有(1-n),超过上限就换地图。

       mp_winlimit 0

       // 回合上限 无0/有(1-n),超过上限就换地图。

       mp_maxrounds 0

       // 允许下载 开启1/关闭0

       sv_allowdownload 1

       // 允许下载(sv_allowdownload 1)开启时控制是否允许玩家的LOGO传送 允许1/禁止0

       sv_send_logos 1

       // 允许下载(sv_allowdownload 1)开启时控制是否允许资源文件传送 允许1/禁止0

       sv_send_resources 1

       // 允许上传 关闭0/开启1

       sv_allowupload 1

       // 服务器重力设置 默认正常重力,范围-到

       sv_gravity

       // 投票比率(大家可以通过投票踢出作弊者和更换地图) (0.1-1)

       mp_mapvoteratio 0.6

       // 设定鬼魂模式刷新值(0.1-1)

       mp_ghostfrequency 0.1

       // 服务器高品质纹理 关闭0/开启1

       sv_sendvelocity 0

       // 服务器减少LAG延迟现象(对服务器要求高) 关闭0/开启1

       mp_lowlag 0

       // 服务器细节数据发送 默认 ,可减低到、,改善速度。

       mp_decals

       // 服务器是否允许麦克风语音通讯 允许1/禁止0

       sv_voiceenable 1

       // 服务器是否允许客户端之间使用语音通信 允许1/禁止0

       sv_alltalk 0

       sv_region 4

       //区域 4为亚洲

       cdrequired "1"

       cdrequiredversion auto

       //为1 是需要CD ,第二行为自动检测CD版本

       // 服务器是否记录文件 不记录0/记录1

       mp_logfile 0

       // 是否在记录文件里记录谈话内容 不记录0/记录1

       mp_logmessages 0

       // load ban files

       exec listip.cfg

       exec banned.cfg

       PS:如果你改的是中文名的话最好用WINDOWS记事本保存并另存为UTF-8格式

       -------------------------------------还是不华丽的分割线---------------------------------------------------

       3 泡杯茶继续看

       接下来就要解释一下其他几个个性化服务器必须要修改到的文件,这两个也是其中的一部分:

       mapcycle.txt 和 motd.txt 简要介绍一下就行了。。第一个是地图列表文件,也就是当服务器运行的时候,就只会在这个文件中有的地图之间从上到下运行,de_dust2

       de_inferno

       de_cbble

       de_train

       de_nuke

       de_cpl_mill

       de_aztec

       de_dust

       从第一个到最后一个,然后在循环

       motd.txt这个文件比较特殊,这个就是当玩家进入你的服务器的时候,看到的第一个欢迎 logo,它是以文本文件形式存在,但是确实一个html网页的源码,如果你有网页制作的功底的话,可以做得很好看。其实你也可以将现成在网页上的图地址替换原先里面的地址,EASY。

       ---------------------------------------------应要求变华丽一点的分割线-------------------------------

       4[size]@接下来的就是问最多的插件问题了[size]

       进入cstrike的addons目录下:

       第一个amxmodx 是amx插件的主文件夹,其下的configs 是一些插件的设置amxx.cfg 是一些amx的设置,plugins.ini是插件的调用配置管理,users.ini 是用户配置文件,用户的一些权限都是在这里设置的。amxmodx\doc 里面有个帮助文件,那里可以学到更多关于amx的管理和使用,amxmodx\plugins 是一些插件的源码文件的存放位置,大致介绍各个文件夹放在什么位置,等下偶会详细解释最主要的amx.cfg 和plugins.ini还有 users.ini的配置!

       addons\Booster 这个是服务器加速插件,推荐一定要开启,那样服务器才能运行在一个高速的状态下;开启于关闭我会在后面介绍;

       addons\cdeath 这个是CD反作弊服务器版的文件,很多朋友都不知道怎么样使用,偶等下在介绍吧!

       addons\metamod 下的 plugins.ini 是所有的插件的根基,也就是说,如果这个文件夹下没有任何东西的话,你什么插件都用不了,很多的插件都要在那个plugins.ini里面设置,但是这个和 addons\amxmodx\configs 下的 plugins.ini 又不同,这个plugins.ini 是所有插件的基础,另外一个只是针对amx加载的插件!

       所以接下来可能要花很长的时间和篇幅对以下插件进行讲解:

       addons\metamod\plugins.ini

       addons\amxmodx\configs\amxx.cfg

       addons\amxmodx\configs\plugins.ini

       addons\amxmodx\configs\users.ini

       一个好的CS服务器基本就Depend on (靠)这几个文件了。

       现在我开始讲解一下所有插件的根基,addons\metamod\plugins.ini 的配置吧!

       win addons\booster\booster_mm.dll 这个是服务器的加速插件,如果不加载这个东西的话,服务器最高不超过Fps

       ;win dlls\chicken_mm.dll 这个是一个娱乐用的,也就是变成小鸡的插件。

       ;win addons\amx\dlls\amx_mm.dll 这个是加载amx的插件,如果不加载的话,很多基于amx的插件就用不了,比如死亡

       ;win addons\amx\dlls\fun_ms.dll 这个也是死亡和魔兽服务器中必须要用到的插件

       ;win addons\amx\dlls\csstats_ms.dll 这个也是死亡和魔兽服务器中必须要用到的插件

       ;win addons\amx\dlls\war3_ms.dll 这个是Amx的一个子插件,魔兽插件,可以在该plugins.ini 中配置,也可以在另外那个plugins.ini (addons\amxmodx\configs\plugins.ini )中加载但是就只能加载一个,重复的不算

       ;win dlls\monster_mm.dll 这个也是Amx的一个子插件,同样可以在这里配置也可以在另外那个 plugins.ini 中配置

       ;win addons/wwcl/dlls/pcawwclconfig_mm.dll WWCL 这个是一个规则插件,某种程度上也能防到某些玩家作弊

       win addons/cdeath/cdmod.dll 这个就是大名鼎鼎的 Cheating-Death CD反作弊的插件,不过现在CD已经不更新了...

       所有的插件以“;”(半角模式下的分号) 开启和关闭 也就是说,你要开启某个插件的话,就不能在该行之前用这个符号,如果不想开启某个插件的话,就在该行 即win的前面,加上一个这个,就能让那个插件不运行了!

       比如:

       我想屏蔽ChickenMod 1.0.5.1插件,只需要在win dlls\chicken_mm.dll这行行首加入;注释符号屏蔽掉这行即可,即将win dlls\chicken_mm.dll改为;win dlls\chicken_mm.dll

       这样我们在启动服务器时,服务器就不会启动ChickenMod 1.0.5.1插件插件。如果想再次开启ChickenMod 1.0.5.1插件,只需要把此行行首的;符号去掉并保存plugins.ini文件即可。其他插件的屏蔽/开启也是如此。

       如下

       ; 说明:

       ; 开启某个模块请去掉前面的分号

       ; 关闭某个模块请在前面加上分号

       ;////////////////////////////////////////////////////////////

       ;// --------------------- Booster ------------------------ //

       ;////////////////////////////////////////////////////////////

       ; 请按自己的CPU选择你需要的程序, 以下2个只能开启一个

       win addons/Booster/booster_mm.dll

       ;win addons/Booster/booster__mm.dll

       ;////////////////////////////////////////////////////////////

       ;// ------------------- AMX Mod X ------------------------ //

       ;////////////////////////////////////////////////////////////

       win addons/amxmodx/dlls/amxmodx_mm.dll

       ; linux 请按自己的CPU选择你需要的程序, 以下2个只能开启一个

       linux addons/amxmodx/dlls/amxmodx_mm_i.so

       ;linux addons/amxmodx/dlls/amxmodx_mm_amd.so

       ;////////////////////////////////////////////////////////////

       ;// --------------- Cheating Death ----------------------- //

       ;////////////////////////////////////////////////////////////

       ; win 请按自己的CPU选择你需要的程序, 以下5个只能开启一个

       win addons/CDeath/cdmod.dll

       ;win addons/CDeath/cdmod_i.dll

       ;win addons/CDeath/cdmod_i.dll

       ;win addons/CDeath/cdmod_k7.dll

       ;win addons/CDeath/cdmod_p4.dll

       ; linux 请按自己的CPU选择你需要的程序, 以下5个只能开启一个

       linux addons/CDeath/cdmod_i.so

       ;linux addons/CDeath/cdmod_i.so

       ;linux addons/CDeath/cdmod_i.so

       ;linux addons/CDeath/cdmod_k7.so

       ;linux addons/CDeath/cdmod_p4.so

       有点乱,大家就只要注意没分号的部分吧!linux不在本帖的讨论范围内,偶对linux的服务器不了解,虽然现在也在学习中

       接下来就是amxx.cfg和plugins.ini 还有users.ini 的配置讲解了,先从amxx.cfg开始好了:)

       其实amxx.cfg文件里面已经有很多的提示了,我就大概说一下吧!先来看偶安装的这个****中amxx.cfg各部分的参数:

       // AMX MOD X 配置文件.

       echo Executing AMX Mod X Configuration File

       // 用户的默认权限,可以用此定义为普通的玩家也加上各种权限,相关权限请参考uers.ini文件的权限说明

       amx_default_access "z" 这个就是玩家的默认权限,相关的权限在users.ini 中有设置

       // AMX的远程登陆总密码(所有op都一样),首次配置时必须修改。

       // setinfo信息会将密码保存在config.cfg文件里。(为了避免泄露密码,请在结束游戏后删除自己的config.cfg)

       // (管理员登陆时请控制台里输入 setinfo _pw "管理员密码",或者直接写入自己的config.cfg文件中)

       amx_password_field "_pw" 这个就是amx远程OP的密码,一定要改的,别和server.cfg中的密码混淆就行

       // 服务器的记录模式选项

       // 0 - 禁止权限登陆,所有的玩家都没有任何的权限

       // 1 - 正常模式

       // 2 - kick所有users.ini文件上无帐号的玩家

       amx_mode 1 服务器的记录模式,一般默认就行了。

       // 在op执行某个命令时是否显示op的行动

       // 0 - 关闭

       // 1 - 不显示OP的行动

       // 2 - 显示OP的行动

       amx_show_activity 2

       // 服务器定时在下方滚动显示服务器信息,以秒为单位

       amx_scrollmsg "欢迎来到 %hostname% -- 该服务器使用了 AMX Mod X 管理插件"

       这里就是一些在游戏中看到的滚动的字的设置位置,可以多设置几条,但是要注意最后那里时间,不能相同,否则就只显示头一条!

       // clanmod风格的服务器MOTD彩色信息,后面的颜色RGB代码可以自己修改

       amx_imessage "欢迎来到 %hostname%" ""

       amx_imessage "这个服务器使用了 AMX Mod X 管理插件\n下载地址

       mand (拥有KICK权限)

       ; d - amx_ban and amx_unban commands (拥有ban的权限)

       ; e - amx_slay and amx_slap commands (拥有强行杀死某人的权限)

       ; f - amx_map command (拥有更换地图的权限)

       ; g - amx_cvar command (可以设置amx的设置参数,但并不是所有的都可以)

       ; h - amx_cfg command (可以加载某个AMX的CFG设置文件权限)

       ; i - amx_chat and other chat commands (可以以管理员身份发布消息)

       ; j - amx_vote and other vote commands (可以发起一个投票事件)

       ; k - access to sv_password cvar (可以更改为服务器加密码)

       ; l - access to amx_rcon command and rcon_password cvar (by amx_cvar command)(可以用RCON命令来以OP身份登陆服务器)

       ; m - custom level A (自定义管理级别,为附加的其他插件预留的权限等级)

       ; n - custom level B

       ; o - custom level C

       ; p - custom level D

       ; q - custom level E

       ; r - custom level F

       ; s - custom level G

       ; t - custom level H

       ; u - menu access (拥有打开MENU管理菜单的权限)

       ; z - user (普通用户权限)

       ; 帐号类型:

       ; a - disconnect player on invalid password (此用户的id进入服务器时需要检测密码)

       ; b - clan tag (此用户的id带有战队标签)

       ; c - this is steamid/wonid (此用户靠steamid/wonid进入服务器)

       ; d - this is ip (此用户靠ip进入服务器)

       ; e - password is not checked (only name/ip/steamid needed)(此用户进入时不检查密码,只需要id或者ip或者steamid)

       ; 密码:

       ; 在自己的autoexec.cfg里加入: setinfo _pw ""

       ; 此处 _pw 代表的是参数 amx_password_field 设定的密码

       ; 管理员帐号格式:

       ;

       ; 例子:

       ; "STEAM_0:0:" "" "abcdefghijklmnopqrstu" "ce"

       ; "..." "" "abcdefghijklmnopqrstu" "de"

       ; "My Name" "my_password" "abcdefghijklmnopqrstu" "a" 如果把My Name 部分和 my_password 改一下,你就有最高的权限了

       "loopback" "" "abcdefghijklmnopqrstu" "de"

       记得之前 amxx.cfg 中 amx_default_access "z" 这个的设置嘛?! 其实就是参考这里的,如果把一些权限加进去,比如:J P Z 注意 你的服就能拥有 投票换图的那个功能了。。。

       最后剩下的就是 plugins.ini 的配置了,这个文件是管理amx下哪些插件的加载与关闭的,内容如下:

       ; AMX Mod X 插件

       ; 管理类 - 以下两个只能使用一种

       admin.amxx ; 管理员识别 (与管理员相关的插件都需要该插件)

       ;admin_sql.amxx ;

(建议收藏)QT实现字符串和枚举的相互转换,如何实现的?(深入源码分析)

       在C++开发中,实现枚举类型到字符串的相互转换有多种方式,但若使用第三方库如boost,可能因库体量大而避免。QT程序提供了更为简便的转换方法,主要通过其元对象机制实现字符串与枚举的转换。实现此转换的步骤分为两步:确保枚举类型被QT定义的Q_ENUM宏声明,和利用QT提供的模板方法。

       首先,使用Q_ENUM宏声明枚举类,以便QT能够自动为该枚举类添加qt_getEnumMetaObject和qt_getEnumName两个友元函数。在customenum.h中,可以定义模板方法来实现字符串到枚举的转换,如fromType函数。

       在使用时,通过调用fromType函数,系统会根据枚举类型是否被Q_ENUM声明进行判断。如果声明了,则系统会通过qt_getEnumMetaObject和qt_getEnumName两个函数找到枚举信息,进行表查找,返回对应的枚举值。反之,如果未声明,系统会返回char类型,表示转换失败。

       从源码分析中,我们可以看到Q_ENUM宏的主要作用是提供qt_getEnumMetaObject和qt_getEnumName这两个友元函数,帮助系统识别和处理枚举类型。qt_getEnumMetaObject函数返回枚举类的静态MetaObject指针,qt_getEnumName函数将枚举类转换为字符串。这些函数的实现依赖于QT的元对象系统,使得转换过程简洁高效。

       总之,QT通过其内部的元对象机制,提供了简单有效的字符串到枚举类型的转换方式,无需依赖外部库,直接在头文件中声明枚举类型并使用提供的模板方法即可实现转换功能。

       关注公众号QTShared,持续探索QT相关的知识和技术。

QGraphicsView架构中绘制刻度尺

       在探讨如何在QGraphicsView架构中绘制刻度尺时,我们首先回顾了在QPainter中的paintEvent绘制刻度尺的方法。然后,我们将关注点转移到如何在QGraphicsView中实现这一目标。QGraphicsView架构允许我们绘制大量的、可选择与可交互的图件,与矢量图编辑软件的操作方式类似,这为我们提供了灵活的图形界面设计工具。

       在QGraphicsView中绘制刻度尺面临的主要挑战是如何确保刻度尺与中间的图形互不干扰。为此,我们尝试了多种方法,包括使用QGraphicsView架构的边框进行绘制,以及重写background方法将刻度尺绘制到背景上。然而,这些方法在图形与刻度尺重叠时表现不佳,因此我们继续探索了更有效的策略。

       我们的最终解决方案是创建一个继承自QGraphicsView的自定义类,我们称之为QCustomGraphicsView。在这个类中,我们实现了刻度尺的功能。通过定义一个继承自QWidget的自定义刻度尺类,我们能够确保刻度尺与中间图形的独立性。这种方法的关键在于正确地初始化和管理刻度尺类,以及在QCustomGraphicsView中适当使用这些类。

       在实现过程中,我们首先定义了一个名为CustomRulerWidget的刻度尺类,它继承自QWidget。在构造函数中,我们传入了QAbstractScrollArea作为参数,以区分水平和垂直刻度尺。然后,我们分别实现了绘制水平和垂直刻度尺的方法,这些方法与在QPainter中使用的类似。

       在QCustomGraphicsView类中,我们声明了两个刻度尺成员变量,并在构造函数中创建了它们的实例。为了使刻度尺大小随着GraphicsView的变化而动态调整,我们重写了resizeEvent函数。此外,还需要更新自绘刻度尺类的resizeEvent事件,以确保零点位置的正确定位,适应刻度尺大小的调整。

       通过上述方法,我们成功地在QGraphicsView架构中实现了独立于中间图形的刻度尺绘制。这种方法不仅解决了图形与刻度尺重叠的问题,还提供了灵活的自定义和控制选项,以适应各种图形界面设计需求。在理解了QPainter中刻度尺绘制的原理后,实施此类解决方案变得相对简单。

Qt中使用QWT绘制柱状图一类多种颜色

       在Qt中,要实现柱状图中显示多种颜色的柱状体,并且能进行文本偏移、宽度调整和鼠标状态的修改,通常QChart库可能无法满足需求。这时,开源的QWT库就派上了用场,它专注于技术应用的GUI组件和实用类,与Qt有良好的集成。

       要达到所需效果,关键在于对QWT库的深入理解和利用。首先,你需要设置QChart的背景色和有效区域背景色,然后定义X轴和Y轴的数据范围。对于字体设置,可以分别处理X轴和Y轴。网格线的显示可以通过代码调整,包括中间刻度线。插入实际数据时,可以自定义类重写QwtPlotBarChart,如CustomBarChartItem,设置每个柱状体的颜色和宽度。X轴刻度优化和文本偏移则涉及到对QwtScaleDraw的重写,如CustomBarChartScaleDraw和SetXBottomMoveLens函数。

       柱状体的偏移调整和宽度定制是在QwtColumnSymbol类,如CustomBarChartColumnSymbol中完成的。至于鼠标显示状态,可能需要对源码中的draw函数进行适当修改。完整的源代码下载链接可供参考。

       尽管这个过程可能需要一些时间和技巧,但QWT的强大功能使得这种复杂的效果成为可能。希望这个指南能帮助你实现所需的效果,祝你成功!