一、导读:
首先这篇文章不是为新手写的,在读此篇文章之前需要你对梦幻系统和官职任务有一定的了解。其次是要求读者最好有一定的数学基础,当然没有光看结论也可以#1。本篇文章主要的内容分为三个部分,第一个部分是导读,闲罗嗦的朋友可以跳过直接看下一部分。第二部分则根据50次单人战事任务的数据合理的计算出14个小时双倍经验到底能获得多少经验,如果你天生对数字反感当然也可以跳过前面的推导直接看结论。最后一部分是做战事任务的简单建议,如果您连这部分都想跳过,那我建议您直接点浏览器右上角的那个小叉叉#75。希望这篇文章能对您有所帮助。
众所周知,单位时间内获得经验值最多的方法非跑环末属,领双升级一般常常是组队到合适的地点打怪或者抓鬼。撇开跑环不说,采用后两种方法升级是有一定的局限性的,其中最大的缺点就是需要花时间找到一组不卡不跳车高功高秒的队员。除了上述两种方法,还有一种在短时间内能获得大量经验值得任务被大家有意无意的忽略,这个任务就是已经开放一段时间的官职任务。奇怪的是很多玩家却认为这个任务很鸡肋,原因可能有两点,其一是因为大家虽然知道官职任务的玩法但是却没有认真的做上一轮或者虽然做了但是却没有掌握好方法。还有一个原因可能是部分玩家在做官职任务的时候领到了找到某某阵的任务,由于买阵浪费时间而且即便是垃圾阵价钱也是不菲,因而直观的认为这肯定是个赔钱且费时的买卖就没有继续做下去,这样会使这些玩家对官职任务做出费钱费力费时的主观臆断,这些都会导致这些玩家得出了官职任务经验少、速度慢的结论。而事实上却恰恰相反,做官职任务不但没有想象中的费钱而且单位单位时间内获得经验还相当可观。
二、战事任务获得经验总数的理论依据:
战事任务是三种官职任务中争议最大的一项,即便常做官职任务的玩家对其也是褒贬不一。至于单位时间内官职任务到底能获得多少经验,我不敢在这里妄下结论,因为即便同一等级人物在同一时刻领取任务,领取到什么任务也是完全随机的。任务不一样完成任务的时间也就不一样,有些运气好一些的朋友相同时间内所获得的经验就要比相对来说运气差些的朋友来的多些,所以无法用诸如一个小时内所获得的经验之类方式来度量。但是我们知道这种随机分配的概率问题是服从一系列的统计学规律的,例如在相当长的一段时间里每个玩家完成的所有任务的总时间趋于一个相同得值。在这里我们不妨通过一个数学技巧对50次战事官职任务做统计(积分不够,50次的数据没发发到论坛上,只好付在文章后面。请见附录),找到完成一次官职任务所需时间的数学期望,即一段相当长时间内的完成所有任务总时间与总次数的比值,也就是样本总体的平均时间。
由于绝大多数读者并不了解统计学方面的专业知识,因此,我只给出简单的推导和结论。可以证明,每个人完成每次任务的时间有相同的分布、期望和方差,由切比雪夫不等式定理和大数定理可知每个人完成每次任务的平均时间近似的服从参数为u’,d’的正态分布,即:
X~N(u’,d’)
其中X为完成一次任务所需时间,u’为样本的数学期望,d’为方差。
设T为50次任务平均完成时间,u为总体期望,S为50次任务的方差。则(T-u)/(S/sqrt(n))满足自由度为n-1的t分布(证明略),即:
(T-u)/(S/sqrt(n))~t(n-1)
则,应用单个总体区间估计式对u进行估计可知,u在置信度为1-a的情况下落在区间:
[T-t(1-a/2,n-1)S/sqrt(n),T t(1-a/2,n-1)S/sqrt(n)]
其中,sqrt(·)为开方算子,t(1-1/a,n-1)为自由度为n-1,分位数a的t分布。
对记录的50次官职任务数据进行计算可知:
T=233(分钟),S=133,n=50
令置信度1-a=090,可以得到平均完成一次任务所用的时间u有的可能落在区间:
[198,268]
上,单位是分钟。
每次完成时间由两部分组成,一部分是实际完成时间的真实值,另一部分为系统误差。由于这里不做精确计算,只需要给出完成时间的粗略估计,所以只使用上面所求的完成任务的平均时间,不再去考虑系统误差。69级领双完成一轮战事任务(不急需的情况)可以得到196893的经验值,平均完成一次任务可以得到196893的经验。则通过上面得出的结论可知在不考虑系统误差的情况下,14个小时的双倍时间获得的经验约为:
[6171273,8353036]
同理可以算出14个小时的官职任务所需要的金钱约为:
[1085794,1469660]
单位是两。
上面的结论给我们吃了个定心丸,战事这个任务只要专心去做经验的确是很可观的(如果要算上急需任务,经验还可以在高些),虽然单人官职任务理论上比同等级级品鬼队或组队打怪要少一些(其实算上跳车的、卡的、不扫不秒不变身的情况,实际所得经验官职可能还要多些#75),但是请注意一点,我们这篇文章强调的是快速升级。既然是快速升级,那么分秒必争当然是必须的,单人官职任务不需要组队,只要你想,准备充足后就可以连续高效的练上14个小时(不能防沉迷的防沉迷系统启动之前)一分钟都不浪费,而这恰恰是需要面对队员不配合、组不到好队等情况的抓鬼和打怪升级所不能比拟的,能使69级的人物一天内连升3——4级这样的成就恐怕只有跑环(69级300环900W 经验)才能与之相比了。
三、官职任务的究竟该怎么做?
1、官职任务的选择:
有了理论依据做基础,接下来我就能放心大胆的说话了(本人长期学理,没有理论作指导总觉得不太踏实~~~#17)。由于在相当长一段时间内所有玩家获得的经验基本相同,所以要长期做官职任务的朋友不必考虑每次领到的任务是什么,正所谓多远都跑多少钱都掏,反正做得多了花的时间都一样。但是官职任务在军需、战事、内政这几个大项方面还是需要选择的。一般来讲,如果所在服务器阵源充足,则官职任务首选军需。可以肯定双倍的情况下做军需任务所得的经验要远高于战事,更重要的是金钱上不会有太多的耗费(据传说还能挣钱,本人到是没算过,主要因为俺这个区人烟稀少实在收不到这么多的阵,不是偷懒的说#17。具体经验和耗费有多少,有兴趣的可以自己使着通过上面给出的方法计算)。如果阵源不充足,那么我建议做战事,内政任务要的东西比较杂,而且需要一些跑环用的装备,所以相对来说比较费钱费时间。战事只是要一些低级烹饪,最贵的好像是翡翠豆腐也不过2W上下。但是通过上面的计算也可以看出战事任务并不省钱,原因出在侦察这个任务上,由于侦察任务怪的攻击(尤其是魔王寨的#75)都比较高,而且还不只打一次怪,所以打完一次没出情报的话中间就得吃包子加血,本人1300的血,一口吃掉10个包子那是常有的事,吃得我这叫一个心疼~~~,在加上到处乱跑用的FF和77,费用可想而知#83
2、关于做官职任务的职业及带宠:
这里主要讨论战事任务,从50次战事任务的数据来看,需要打架的任务(策反,侦察)所花费的时间占总时间的比例为62%,而跑路(打怪中途,找人)的时间是不能降低的,所以清怪快慢是提高官职任务效率的关键。我认为最适合做官职任务的职业是4力1耐加点并且适当强身的大唐和4力1体或4力1耐加点的狮驼岭。选择上面三种人物的原因是4力的加点保证了清怪速度,而大唐适当的强身和魔族天生无与伦比的体质的发挥可以确保在打怪的过程中能站到最后#17。当然,并不是说其他职业和加点方法就不能去刷单人官职任务,只是效率要较前两种低一些。为了满足一般性,前面所给出得50次战事任务的数据的试验对象就是3力1体1耐加点的大唐官府。
前面说过战事任务主要的耗费几乎都是在烹饪花费、药钱和FF上面,其中烹饪和FF的花费一般无法减少,所以要想降低花费的主要途径就是尽量节省打怪所花费的药钱(和尚这段可以忽略~~)。要说到节省包子,75级以前最省钱得宠物非高吸血的黑山老妖末数,但是黑山老妖要命的命中率实在让人头痛。如果你手头不是很富裕建议你牺牲速度带一只4力1体加点会高级吸血、高级偷袭的黑山老妖,那样会让你省下相当可观的包子钱,否则的话还是带个会泰山和高级神迹的瑞兽比较好。为什么黑山老妖要4力1体加点呢?其实原因很明显,5力加点的黑山老妖遇到大唐的主怪很可能一个后发就被秒#75,吃桂花丸怎么也比吃包子贵吧,宝宝挂了那可就有点得不偿失了。75级以后首推必杀(连击)和吸血的芙蓉,攻击力一流,命中还说的过去又有吸血可以节省包子,真是1举多得啊。而且芙蓉还有一个特点就是攻击速度快不磨蹭,过去踹一脚就走干净利索,无形中又进一步的提高了清怪速度
最后建议装备上至少要有个解除异常状态的特技,能解自己就OK,耗的怒气少还能多使几次#0。不要小看这个水清决,有些方寸的怪封的死啦准,俺就遇到过这么一次,主怪和小怪全是方寸的,上来就被他俩封了个瓷实,然后两个人聊天喝茶好不惬意,过了N个回合才想起被封住的我,丢个五雷咒以示补偿,第N 1个回合又封。—%¥#·这次任务用了将近10分钟才打完,还害我可怜的黑山挂了一回~~~至于其它特技嘛,有个能加血的最好,没有也无所谓了。
OK,就写到这了。简单一句话,单人官职任务非但不鸡肋,而且有相当可观的经验,可以达到快速冲级的目的。
不知道大家看完上面的文章有什么感想,会不会有玩家得出我在卖弄的结论。我不敢哗众取宠,更没有卖弄的资格与本钱,写这篇文章只是想让大家知道,要想玩好一个游戏也不是一件容易的事情,只知道往游戏里砸钱砸时间而追求更高的等级绝对是一种不明智的行为,浪费金钱还在其次,重要的是荒废了现实生活中的事业和学业。相信在玩梦幻的多数玩家都是学生,动动脑筋,运用你们所学的知识来解决游戏的中一些问题,长此以往游戏会慢慢变成你学习的动力#1。在下写这篇缺根少据的文章目的是想起个抛砖引玉的作用,希望日后能看到更多这类文章~~~~!
自我介绍一下,本人元老级梦幻游侠一个,几乎从不上线但比成天在线的玩家更加关注梦幻的发展变化。从没有好好练过一个人物,也从不局限于某一个固定的地点,一年多的时间在山西区各服都留下了足迹,等级80的有之#17还在新手村里逛荡没出来的亦有之#18,其名都不离腐烂二字。现如今账号该删的删该送人的送人落了个两手空空,国庆节前无聊突发奇想冲出一个70级小号(不用说技能垃圾的要命),收集数据、证明计算忙了个不亦乐乎、晕头转向,终于能有点结论写下寥寥数言以慰我心。本篇文章试验用人物为山西区平遥古城69级小大唐0腐烂生存0,欢迎交流。
附录:
以下数据为不同日期不同时间段抽取的数据,其中用时是指从领到任务到开始领下一个任务的时间,花费包括FF、住店、包子、金创、医宠等费用。试验任务为69级大唐,加点方式为3力1体1耐,命中969,伤害799,防御561,气血1295,带的宠物为69级全力加点的黑山老妖,技能高级吸血,高级偷袭,攻击703,防御308,气血1060。
山西区,平遥古城,150点卡100W——120W
烤肉:10000
烤鸭:5000
翡翠豆腐:15000
珍露酒:3000
虎骨酒:3000
女儿红:3000
佛跳墙:3000
(吴:吴文采 海:海老先生 戏:戏班老板 马:马全有 者:者释和尚 业:业释和尚海 释:海释和尚 小:小芸芸 怜:怜儿姑娘 慕:慕容先生 强:强盗头子 山:山贼头子 穷:穷汉)
次数 任务 用时 花费 经验
1 找人(吴,海,戏) 210 1500 14364
2 找人(者,怜,戏) 214 1000 15868
3 找人(穷,者,慕) 308 1000 16972
4 国境侦察 215 800 18076
5 找人(海,强,业) 243 1000 19180
6 境外侦察 223 1500 20284
7 国境策反(烤肉) 340 10000 21388
8 找人(穷,山,小) 156 1000 22492
9 境外策反(珍露酒) 248 4000 23569
10 找人(强,者,业) 230 1000 24700
11 国境策反(包子) 400 1300 -
12 国境策反(包子) 129 600 -
13 国境策反(翡翠豆腐) 226 16500 -
14 花果山侦察 526 2500 -
15 找人(海,穷,强) 251 1000 -
16 花果山侦察 245 1500 -
17 花果山侦察 350 1900 -
18 找人(强,海,吴) 322 1000 -
19 境外侦察 342 1700 -
20 国境侦察 115 1000 -
21 找人(马,戏,者) 130 1000 -
22 花果山侦察 135 1100 -
23 境外策反(烤肉) 321 18000 -
24 国境策反(女儿红) 153 4000 -
25 找人(马,慕,穷) 050 1500 -
26 北俱侦察 407 2000 -
27 花果山侦察 205 1300 -
28 找人(慕,业,强) 230 1500 -
29 北俱侦察 510 2500 -
30 国境侦察 129 1000 -
31 找人(海,山,马) 122 1000 -
32 找人(马,者,海释) 146 1000 -
33 长寿侦察 138 1000 -
34 找人(强,者,马) 150 1000 -
35 北俱侦察 350 2350 -
36 找人(吴,戏,马) 105 1000 -
37 找人(强,怜,马) 142 1000 -
38 境外策反(翡翠豆腐) 430 16500 -
39 找人(者,山,强) 250 1000 -
40 境外策反(烤鸭) 226 4000 -
41 找人(吴,戏,强) 213 1500 -
42 找人(吴,海,山) 156 1000 -
43 找人(吴,海,戏) 236 1000 -
44 境外策反(烤鸭) 450 4500 -
45 找人(海,戏,慕) 040 1500 -
46 人(海释,小,者) 219 1000 -
47 找人(穷,强,海) 247 1500 -
48 境外策反(烤鸭) 238 5000 -
49 国境策反(烤鸭) 315 5200 -
50 找人(海释,海,业) 143 1000 -
网上找的 作者吴春雷
参考资料:
天山老妖
关注
Hello Qt(三十二)——Model/View框架 原创
2022-03-05 00:03:21
天山老妖
码龄7年
关注
一、Model/View框架简介
1、Model/View框架核心思想
Model/View框架的核心思想是模型(数据)与视图(显示)相分离,模型对外提供标准接口存取数据,不关心数据如何显示,视图自定义数据的显示方式,不关心数据如何组织存储。
Model/View框架中数据与显示的分离,可以允许使用不同界面显示同一数据,也能够在不改变数据的情况下添加新的显示界面。为了处理用户输入,引入了委托(delegate)。引入委托的好处是可以自定义数据项的渲染和编辑。
模型必须为每一个数据提供独一无二的索引,视图通过索引访问模型中的数据。
模型与数据源进行交互,为框架中其它组件提供接口。交互的本质在于数据源的类型以及模型的实现方式。视图从模型获取模型索引,通过将模型索引反向传给模型,视图又可以从数据源获取数据。在标准视图中,委托渲染数据项;在需要编辑数据时,委托使用直接模型索引直接与模型进行交互。
Model/View架构分为三部分:模型、视图和委托。每一个组件都由一个抽象类定义,抽象类提供了基本的公共接口以及一些默认实现。
2、Model/View框架工作机制
模型、视图和委托使用信号槽进行交互:
A、底层维护的数据发生改变时,模型发出信号通知视图
B、当用户与视图进行交互时,视图发出信号提供了有关用户与界面进行交互的信息
C、当用户编辑数据项时,委托发出信号用于告知模型和视图编辑器的状态。
3、Model/View框架的类
所有的模型都是QAbstractItemModel的子类。QAbstractItemModel类定义了供视图和委托访问数据的接口。模型并不一定存储数据本身。QAbstractItemModel提供的接口足够灵活,足以应付以表格、列表和树的形式显示的数据。如果要为列表或者表格设计自定义的模型,直接继承QAbstractListModel和QAbstractTableModel类会更好,因为这两个类已经实现了很多通用函数。
QT内置了多种标准模型:
QStringListModel:存储简单的字符串列表
QStandardItemModel:可以用于树结构的存储,提供了层次数据
QFileSystemModel:本地系统的文件和目录信息
QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:存取数据库数据
QT提供了多个预定义好的视图类:
QListView:用于显示列表
QTableView:用于显示表格
QTreeView:用于显示层次数据
QAbstractItemView
QAbstractItemDelegate 则是所有委托的抽象基类
自 Qt 44 以来,默认的委托实现是QStyledItemDelegate。但是,QStyledItemDelegate 和QItemDelegate 都可以作为视图的编辑器,二者的区别在于,QStyledItemDelegate 使用当前样式进行绘制。在实现自定义委托时,推荐使用QStyledItemDelegate 作为基类,或者结合Qt style sheets。
二、Model
1、模型简介
Model/View框架中,Model提供一种标准接口,供视图和委托访问数据。 QT中,Model接口由QAbstractItemModel类进行定义。不管底层数据是如何存储的,只要是QAbstractItemModel的子类,都提供一种表格形式的层次结构。视图利用统一的转换来访问模型中的数据。模型内部数据的组织方式并不一定和视图中数据的显示相同。
List Model虽然是线性的列表,有一个 Root Item(根节点),线性的一个个数据可以看作是一个只有一列的表格,但是它是有层次的,因为有一个根节点。Table Model就比较容易理解,只是也存在一个根节点。Tree Model主要面向层次数据,而每一层次都可以都很多列,因此也是一个带有层次的表格。
2、模型索引
为了使数据的显示同存储分离,引入了模型索引(model index)的概念。通过模型索引,可以访问模型的特定元素的特定部分。视图和委托使用模型索引来请求所需要的数据。由此可以看出,只有模型自己需要知道如何获得数据,模型所管理的数据类型可以使用通用的方式进行定义。模型索引保存有创建的它的那个模型的指针,使同时 *** 作多个模型成为可能。
模型索引提供了所需要的信息的临时索引,用于通过模型取回或者修改数据。由于模型随时可能重新组织其内部的结构,因此模型索引很可能变成不可用的,此时,就不应该保存这些数据。如果你需要长期有效的数据片段,必须创建持久索引。持久索引保证其引用的数据及时更新。临时索引(也就是通常使用的索引)由QModelIndex类提供,持久索引则是 QPersistentModelIndex类。
为了定位模型中的数据,需要三个属性:行号、列号以及父索引。
在类表格的视图中,比如列表和表格,行号和列号足以定位一个数据项。但对于树型结构,由于树型结构是一个层次结构,而层次结构中每一个节点都有可能是一个表格。所以,每一个项需要指明其父节点。由于在模型外部只能用过索引访问内部数据,因此,index()函数还需要一个 parent 参数:
QModelIndex index = model->index(row, column, parent);
父结点为虚拟root结点时,可以使用空索引(QModelIndex()产生)作为父结点参数。
3、数据角色
模型可以针对不同的组件(或者组件的不同部分,比如按钮的提示以及显示的文本等)提供不同的数据。例如,Qt::DisplayRole用于视图的文本显示。通常来说,模型中的数据项包含一系列不同的数据角色,数据角色定义在 Qt::ItemDataRole 枚举中。
通过为每一个角色提供恰当的数据,模型可以告诉视图和委托如何向用户显示内容。不同类型的视图可以选择忽略自己不需要的数据,也可以添加所需要的额外数据。
模型中的数据在视图中的显示方式可能不同,模型必须为数据设置特定数据角色。数据角色用于提示视图数据的作用,是不同视图统一风格显示数据的标准。
4、QStringListModel
QStringListModel是一个可编辑的模型,可以为组件提供一系列字符串作为数据,是封装了QStringList的model。QStringListModel通常作为只有一列的视图组件的model,如QListView和QComboBox。
QStringListModel使用实例如下:
#include <QApplication>
#include <QStringListModel>
#include <QListView>
#include <QStringList>
int main(int argc, char argv[])
{
QApplication a(argc, argv);
QStringListModel listModel = new QStringListModel;
QListView view = new QListView;
QStringList nameList;
nameList<<"ZheDong Mao"<<"RenLai Zhou"<<"XiaoPing Deng"
<<"ShaoQi Liu"<<"De Zhu"<<"DeHuai Peng";
listModel->setStringList(nameList);
view->setModel(listModel);
view->setEditTriggers(QAbstractItemView::AnyKeyPressed |
QAbstractItemView::DoubleClicked);
view->setWindowTitle("QStringListModel");
view->show();
return aexec();
}
5、QFileSystemModel
QFileSystemModel是QT标准的文件系统的model。
QFileSystemModel使用实例:
#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>
int main(int argc,char argv[])
{
QApplication app(argc,argv);
//创建文件系统模型
QFileSystemModel model;
//指定根目录
modelsetRootPath(QDir::currentPath());
//创建树形视图
QTreeView tree;
//为视图指定模型
treesetModel(&model);
//指定根索引
treesetRootIndex(modelindex(QDir::currentPath()));
//创建列表视图
QListView list;
listsetModel(&model);
listsetRootIndex(modelindex(QDir::currentPath()));
treeshow();
listshow();
return appexec();
}
6、QSortFilterProxyModel
QSortFilterProxyModel类提供在其他的model和view之间排序和过滤数据的支持。QSortFilterProxyModel不能单独使用,是一个代理,真正的数据需要另外的模型提供。QSortFilterProxyModel的作用是对数据进行排序和过滤。
QSortFilterProxyModel使用实例:
#include <QApplication>
#include <QFileSystemModel>
#include <QSortFilterProxyModel>
#include <QTreeView>
#include <QListView>
int main(int argc,char argv[])
{
QApplication app(argc,argv);
//创建文件系统模型
QFileSystemModel model;
//指定根目录
modelsetRootPath(QDir::currentPath());
//创建树形视图
QSortFilterProxyModel proxymodel;
proxymodelsetFilterKeyColumn(0);
proxymodelsetSourceModel(&model);
QTreeView tree;
//为视图指定模型
treesetModel(&proxymodel);
//指定根索引
treesetRootIndex(proxymodelindex(0, 0, QModelIndex()));
//创建列表视图
QListView list;
listsetModel(&proxymodel);
listsetRootIndex(proxymodelindex(0, 0, QModelIndex()));
treeshow();
listshow();
return appexec();
}
三、View
Model/View 架构中,视图是数据从模型到最终用户的途径。数据通过视图向用户进行显示,但通常数据的显示同底层数据的存储是完全不同的。
QAbstractItemModel提供标准的模型接口,使用QAbstractItemView提供标准的视图接口,可以将数据同显示层分离,在视图中利用前面所说的模型索引。视图管理来自模型的数据的布局:既可以直接渲染数据本身,也可以通过委托渲染和编辑数据。
视图不仅用于显示数据,还用于在数据项之间的导航以及数据项的选择。另外,视图也需要支持很多基本的用户界面的特性,例如右键菜单以及拖放。视图可以提供数据编辑功能,也可以将编辑功能交由某个委托完成。视图可以脱离模型创建,但是在其进行显示之前,必须存在一个模型。对于用户的选择,多个视图可以相互独立,也可以进行共享。
QT内置了QListView、QTreeView、QTableView视图类,QListView把model中的数据项以一个简单的列表的形式显示,或是以经典的图标视图的形式显示。QTreeView把model中的数据项作为具有层次结构的列表的形式显示,允许以紧凑的深度嵌套的结构进行显示。QTableView把model中的数据项以表格的形式展现。
四、Delegate
委托就是供视图实现某种高级的编辑功能。Model/View 没有将用户交互部分完全分离。一般地,视图将数据向用户进行展示并且处理通用的输入。但是,对于某些特殊要求(比如这里的要求必须输入数字),则交予委托完成。这些组件提供输入功能,同时也能渲染某些特殊数据项。委托的接口由 QAbstractItemDelegate定义。
QAbstractItemDelegate 通过paint()和sizeHint()两个函数渲染用户内容(必须自己将渲染器绘制出来)。从QT44开始,QT提供了基于组件的子类:QItemDelegate和QStyledItemDelegate。默认的委托是QStyledItemDelegate。QItemDelegate与QStyledItemDelegate的区别在于绘制和向视图提供编辑器的方式。QStyledItemDelegate使用当前样式绘制,并且能够使用Qt Style Sheet,在自定义委托时推荐使用QStyledItemDelegate作为基类。
继承自QStyledItemDelegate或QItemDelegate的自定义委托类需要重写实现以下几个函数:
[virtual] QWidget createEditor(QWidget parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
创建编辑器,作为用户编辑数据时所使用的编辑器,从模型中接受数据,返回用户修改的数据。
[virtual] void setEditorData(QWidget editor, const QModelIndex &index) const
根据模型索引获取模型中的数据并设数据到编辑器
[virtual] void setModelData(QWidget editor, QAbstractItemModel model,
const QModelIndex &index) const
将编辑后的数据写入model
[virtual] void updateEditorGeometry(QWidget editor,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
更新编辑器布局
五、项选择模型
1、QItemSelectionModel简介
选择是视图中常用的 *** 作。在列表、树或者表格中,通过鼠标点击可以选中某一项,选中项会变成高亮或者反色。在 QT中,选择也是使用了一种模型。在 Model/View架构中,选择模型提供了一种更通用的对选择 *** 作的描述。对于一般应用而言,QT内置的选择模型已经足够,但QT也允许创建自己的选择模型,来实现一些特殊的 *** 作。
QT使用QItemSelectionModel类获取视图中数据项的选择情况。QItemSelectionModel可以保持对视图中选中数据项的跟踪。视图中被选择的数据项的信息存储在一个QItemSelectionModel实例中。选中的数据项的模型索引与所有的视图都是独立的。一个模型设置多个视图时,可以实现在多个视图之间共享同一个选择模型,达到同步 *** 作的目的。视图中总有一个当前数据项和一个选中的数据项,他们可以是同一个数据项。
选择由选择区域组成。模型只将选择区的开始和结束的索引位置记录下来,以保证对大的选区也有很好的性能。非连续选区则由多个连续选择组成。
标准视图类(QListView、QTreeView、QTableView)提供了默认的选择模型,足以满足大多数应用程序的需求。一个视图的选择模型可以通过 selectionModel()函数获取,然后使用setSelectionModel()提供给其它视图共享,因此,一般没有必要新建选择模型。
如果需要创建一个选择区,需要指定一个模型以及一对索引,使用这些数据创建一个QItemSelection对象。索引指向给定的模型中的数据,并且作为一个块状选择区的左上角和右下角的索引。为了将选择区应用到模型上,需要将选择区提交到选择模型。这种 *** 作有多种实现,对于现有选择模型有着不同的影响。
2、项选择模型使用
A、构建标准数据项模型并设置设置数据
//构建7行4列的项目模型
QStandardItemModel model = new QStandardItemModel(7,4,this);
for (int row=0; row < 7; row++)
{
for (int col=0; col < 4; col++)
{
QStandardItem item = new QStandardItem(QString("%1")arg(row4+col));
//为项目模型添加项目
model->setItem(row,col,item);
}
}
B、添加视图,设置模型
//添加视图,并将视图放在窗体中央
QTableview view = new QTableView;
view->setModel(model);//为视图添加模型
setCentralWidget(view);
C、获取视图的数据项选择模型
QItemSelectionModel selectionModel = view->selectionModel();
D、设置被选择的数据项
//定义左上,右下的索引,然后使用这两个索引创建选择
QModelIndex topLeft;
QModelIndex rightBottom;
QModelIndex parentIndex = QModelIndex();
topLeft = model->index(1,1,parentIndex);
rightBottom = model->index(5,2,parentIndex);
//设置被选择的数据项
QItemSelection selection(topLeft, rightBottom);
E、设置选择模式
selectionModel->select(selection,QItemSelectionModel::Select);
QItemSelectionModel::Select:选择所有指定的选区
QItemSelectionModel::Toggle:反向 *** 作
QItemSelectionModel::Deselect:取消指定的已选选区
QItemSelectionModel::Rows:选择行
QItemSelectionModel::Columns:选择列
QItemSelectionModel::Current:将当前选区替换为新的选区
QItemSelectionModel::Clear:取消全部已有选区
F、选择模型的选择改变信号
[signal] void QItemSelectionModel::selectionChanged(const QItemSelection &selected,
const QItemSelection &deselected)
选择发生改变时,触发信号。会发送被选择的QItemSelection和未被选择的QItemSelection
[signal] void QItemSelectionModel::currentChanged(const QModelIndex& index,
const QModelIndex &previous)
当前数据项变化时,触发信号。会发送当前选择的QModelIndex和前一个QModelIndex。
G、选择改变信号的槽函数
void updateSelection(QItemSelection &selected,QItemSelection &deselected);
选择模型改变后的槽函数
void updateSelection(QItemSelection &selected, QItemSelection &deselected)
{
QModelIndex index;
QModelIndexList indexList = selectedindexes();
foreach (index, indexList)
{
QString text = QString("(%1,%2)")arg(indexrow())arg(indexcolumn());
view->model()->setData(index,text);
}
indexList = deselectedindexes();
//清空上一次选择的项目内容
foreach (index, indexList)
{
view->model()->setData(index,"");
}
}
void changeCurrent(const QModelIndex& index,const QModelIndex &previous);
显示当前选择项的数据改变情况
void changeCurrent(const QModelIndex& index, const QModelIndex &previous)
{
qDebug() << QString("move(%1,%2)to(%3,%4)")
arg(previousrow())arg(previouscolumn())
arg(currentrow())arg(currentcolumn());
}
H、信号与槽函数的连接
connect(selectionModel,SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this,SLOT(updateSelection(QItemSelection&,QItemSelection&)));
connect(selectionModel,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this,SLOT(changeCurrent(QModelIndex,QModelIndex)));
I、视图间共享选择模型
QTableView view2 = new QTableView;
view2->setWindowTitle("TableView2");
view2->setModel(model);//设置模型
view2->setSelectionModel(selectionModel);//设置共同的选择模型
view2->show();
网速慢的几种原因:
一、网络自身问题
您想要连接的目标网站所在的服务器带宽不足或负载过大。处理办法很简单,请换个时间段再上或者换个目标网站。
二、网线问题导致网速变慢
我们知道,双绞线是由四对线按严格的规定紧密地绞和在一起的,用来减少串扰和背景噪音的影响。同时,在T568A标准和T568B标准中仅使用了双绞线的 1、2和3、6四条线,其中,1、2用于发送,3、6用于接收,而且1、2必须来自一个绕对,3、6必须来自一个绕对。只有这样,才能最大限度地避免串扰,保证数据传输。本人在实践中发现不按正确标准(T586A、T586B)制作的网线,存在很大的隐患。表现为:一种情况是刚开始使用时网速就很慢;另一种情况则是开始网速正常,但过了一段时间后,网速变慢。后一种情况在台式电脑上表现非常明显,但用笔记本电脑检查时网速却表现为正常。对于这一问题本人经多年实践发现,因不按正确标准制作的网线引起的网速变慢还同时与网卡的质量有关。一般台式计算机的网卡的性能不如笔记本电脑的,因此,在用交换法排除故障时,使用笔记本电脑检测网速正常并不能排除网线不按标准制作这一问题的存在。我们现在要求一律按T586A、T586B标准来压制网线,在检测故障时不能一律用笔记本电脑来代替台式电脑。
三、网络中存在回路导致网速变慢
当网络涉及的节点数不是很多、结构不是很复杂时,这种现象一般很少发生。但在一些比较复杂的网络中,经常有多余的备用线路,如无意间连上时会构成回路。比如网线从网络中心接到计算机一室,再从计算机一室接到计算机二室。同时从网络中心又有一条备用线路直接连到计算机二室,若这几条线同时接通,则构成回路,数据包会不断发送和校验数据,从而影响整体网速。这种情况查找比较困难。为避免这种情况发生,要求我们在铺设网线时一定养成良好的习惯:网线打上明显的标签,有备用线路的地方要做好记载。当怀疑有此类故障发生时,一般采用分区分段逐步排除的方法。
四、网络设备硬件故障引起的广播风暴而导致网速变慢
作为发现未知设备的主要手段,广播在网络中起着非常重要的作用。然而,随着网络中计算机数量的增多,广播包的数量会急剧增加。当广播包的数量达到30%时,网络的传输效率将会明显下降。当网卡或网络设备损坏后,会不停地发送广播包,从而导致广播风暴,使网络通信陷于瘫痪。因此,当网络设备硬件有故障时也会引起网速变慢。当怀疑有此类故障时,首先可采用置换法替换集线器或交换机来排除集线设备故障。如果这些设备没有故障,关掉集线器或交换机的电源后,DOS下用 “Ping”命令对所涉及计算机逐一测试,找到有故障网卡的计算机,更换新的网卡即可恢复网速正常。网卡、集线器以及交换机是最容易出现故障引起网速变慢的设备。
五、网络中某个端口形成了瓶颈导致网速变慢
实际上,路由器广域网端口和局域网端口、交换机端口、集线器端口和服务器网卡等都可能成为网络瓶颈。当网速变慢时,我们可在网络使用高峰时段,利用网管软件查看路由器、交换机、服务器端口的数据流量;也可用 Netstat命令统计各个端口的数据流量。据此确认网络数据流通瓶颈的位置,设法增加其带宽。具体方法很多,如更换服务器网卡为100M或1000M、安装多个网卡、划分多个VLAN、改变路由器配置来增加带宽等,都可以有效地缓解网络瓶颈,可以最大限度地提高数据传输速度。
六、蠕虫病毒的影响导致网速变慢
通过E-mail散发的蠕虫病毒对网络速度的影响越来越严重,危害性极大。这种病毒导致被感染的用户只要一上网就不停地往外发邮件,病毒选择用户个人电脑中的随机文档附加在用户机子的通讯簿的随机地址上进行邮件发送。成百上千的这种垃圾邮件有的排着队往外发送,有的又成批成批地被退回来堆在服务器上。造成个别骨干互联网出现明显拥塞,网速明显变慢,使局域网近于瘫痪。因此,我们必须及时升级所用杀毒软件;计算机也要及时升级、安装系统补丁程序,同时卸载不必要的服务、关闭不必要的端口,以提高系统的安全性和可靠性。
七、防火墙的过多使用
防火墙的过多使用也可导致网速变慢,处理办法不必多说,卸载下不必要的防火墙只保留一个功能强大的足以。
八、系统资源不足
您可能加载了太多的运用程序在后台运行,请合理的加载软件或删除无用的程序及文件,将资源空出,以达到提高网速的目的。
回答者: 老妖真精 - 副总裁 十一级 9-29 22:23
--------------------------------------------------------------------------------
网速慢的原因及解决办法!
本文为本人一网友所赠,愿与大家共分享。(有添加和改动)
如有错误之处,望高手指正。
一、网络自身问题
您想要连接的目标网站所在的服务器带宽不足或负载过大。处理办法很简单,请换个时间段再上或者换个目标网站。
二、网线问题导致网速变慢
我们知道,双绞线是由四对线按严格的规定紧密地绞和在一起的,用来减少串扰和背景噪音的影响。同时,在T568A标准和T568B标准中仅使用了双绞线的1、2和3、6四条线,其中,1、2用于发送,3、6用于接收,而且1、2必须来自一个绕对,3、6必须来自一个绕对。只有这样,才能最大限度地避免串扰,保证数据传输。本人在实践中发现不按正确标准(T586A、T586B)制作的网线,存在很大的隐患。表现为:一种情况是刚开始使用时网速就很慢;另一种情况则是开始网速正常,但过了一段时间后,网速变慢。后一种情况在台式电脑上表现非常明显,但用笔记本电脑检查时网速却表现为正常。对于这一问题本人经多年实践发现,因不按正确标准制作的网线引起的网速变慢还同时与网卡的质量有关。一般台式计算机的网卡的性能不如笔记本电脑的,因此,在用交换法排除故障时,使用笔记本电脑检测网速正常并不能排除网线不按标准制作这一问题的存在。我们现在要求一律按T586A、T586B标准来压制网线,在检测故障时不能一律用笔记本电脑来代替台式电脑。
三、网络中存在回路导致网速变慢
当网络涉及的节点数不是很多、结构不是很复杂时,这种现象一般很少发生。但在一些比较复杂的网络中,经常有多余的备用线路,如无意间连上时会构成回路。比如网线从网络中心接到计算机一室,再从计算机一室接到计算机二室。同时从网络中心又有一条备用线路直接连到计算机二室,若这几条线同时接通,则构成回路,数据包会不断发送和校验数据,从而影响整体网速。这种情况查找比较困难。为避免这种情况发生,要求我们在铺设网线时一定养成良好的习惯:网线打上明显的标签,有备用线路的地方要做好记载。当怀疑有此类故障发生时,一般采用分区分段逐步排除的方法。
四、网络设备硬件故障引起的广播风暴而导致网速变慢
作为发现未知设备的主要手段,广播在网络中起着非常重要的作用。然而,随着网络中计算机数量的增多,广播包的数量会急剧增加。当广播包的数量达到30%时,网络的传输效率将会明显下降。当网卡或网络设备损坏后,会不停地发送广播包,从而导致广播风暴,使网络通信陷于瘫痪。因此,当网络设备硬件有故障时也会引起网速变慢。当怀疑有此类故障时,首先可采用置换法替换集线器或交换机来排除集线设备故障。如果这些设备没有故障,关掉集线器或交换机的电源后,DOS下用“Ping”命令对所涉及计算机逐一测试,找到有故障网卡的计算机,更换新的网卡即可恢复网速正常。网卡、集线器以及交换机是最容易出现故障引起网速变慢的设备。
五、网络中某个端口形成了瓶颈导致网速变慢
实际上,路由器广域网端口和局域网端口、交换机端口、集线器端口和服务器网卡等都可能成为网络瓶颈。当网速变慢时,我们可在网络使用高峰时段,利用网管软件查看路由器、交换机、服务器端口的数据流量;也可用Netstat命令统计各个端口的数据流量。据此确认网络数据流通瓶颈的位置,设法增加其带宽。具体方法很多,如更换服务器网卡为100M或1000M、安装多个网卡、划分多个VLAN、改变路由器配置来增加带宽等,都可以有效地缓解网络瓶颈,可以最大限度地提高数据传输速度。
六、蠕虫病毒的影响导致网速变慢
通过E-mail散发的蠕虫病毒对网络速度的影响越来越严重,危害性极大。这种病毒导致被感染的用户只要一上网就不停地往外发邮件,病毒选择用户个人电脑中的随机文档附加在用户机子的通讯簿的随机地址上进行邮件发送。成百上千的这种垃圾邮件有的排着队往外发送,有的又成批成批地被退回来堆在服务器上。造成个别骨干互联网出现明显拥塞,网速明显变慢,使局域网近于瘫痪。因此,我们必须及时升级所用杀毒软件;计算机也要及时升级、安装系统补丁程序,同时卸载不必要的服务、关闭不必要的端口,以提高系统的安全性和可靠性。
七、防火墙的过多使用
防火墙的过多使用也可导致网速变慢,处理办法不必多说,卸载下不必要的防火墙只保留一个功能强大的足以。
八、系统资源不足
您可能加载了太多的运用程序在后台运行,请合理的加载软件或删除无用的程序及文件,将资源空出,以达到提高网速的目的。
以上就是关于为什么我的梦幻西游官网上不去啊全部的内容,包括:为什么我的梦幻西游官网上不去啊、model/view可以不存数据嘛,、调制解调器不是很热,网速比以前更慢了,为什等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)