首页 > 编程知识 正文

小千的开发人机,qt开发界面的优缺点

时间:2023-05-04 03:56:26 阅读:185013 作者:2532

目录

1.1界面表示:

1.1.1棋盘表示:

1.1.2.棋子表示:

2.1界面表示:

2.1.1棋盘绘制

一:作用

二:执行时间

2.1.2棋子绘制


  1.1界面表示:

 

1.1.1棋盘表示:

 

使用十条横线与九条竖线在QT软件下绘制棋盘,在画竖线的时候为了显示出河界,对第2到第8列进行特判。

 

1.1.2.棋子表示:

 

每一个棋子都有一些信息,对于这些信息定义一个棋子类把他们存储起来,在打印棋子的时候根据这些棋子把棋子打印出来。

 

2.1界面表示:

 

调用QPainter头文件。人们在下象棋的时候首先做的事情就是摆放棋盘,棋盘摆放完成之后就是摆放棋子,在电脑上我们不能够像现实中这样拿出来一个现成的棋盘来让我们使用,不过我们可以自己做一个棋盘来使用。我使用的是QPainter进行绘图,QPainter只能在类对象的paintEvent()函数中绘制图形,其中我用到了painter.drawLine(绘制直线)、painter.setBrush(填充颜色)、painter.setPen(写字)、painter.drawEllipse(画一个圆)、painter.setFont(设置字体大小)和painter.drawText。

 

2.1.1棋盘绘制

 

画横线:painter.drawLine(QPoint(d,i*d),QPoint(9*d,i*d));其中d代表的是每个方格的长度,对于QPoint括号内的参数,后面的代表行数,前面的代表列数。

画竖线:painter.drawLine(QPoint(i*d,d),QPoint(i*d,10*d));相较于前面的画横线的代码,这个是该表参数的顺序。在画竖线的时候为了显示出河界,对第2到第8列进行特判。

画九宫格:painter.drawLine(QPoint(4*d,1*d),QPoint(6*d,3*d));四个与与这个相类似的函数构成,坐标代表的是棋盘上九宫格的对顶角的坐标。

棋子表示:每一个棋子都有一些信息,对于这些信息定义一个棋子类把他们存储起来,存储这些棋子的是Stone类,所有的信息在定义的_s[]数组里面。Stone类中包含int _row;int _col;TYPE _type;int _id;bool _dead;bool _red;分别代表每一个棋子的横纵坐标,棋子类型,棋子的序号,棋子是不是还在棋盘上以及棋子的颜色,对于这些棋子的初始化,我使用init(int id);rotate();两个函数,前者的作用是把棋子的信息储存在数组里面,后者的作用是根据棋子的英文名字给出其对应的中文名字,以方便打印棋子,在打印棋子的时候根据这些信息把棋子打印出来。

绘制棋盘使用的函数是paintEvent(QPaintEvent *),说到这个函数要提到的是这个函数的作用和这个函数的执行时间:

 

一:作用

 

排好棋盘,然后往棋盘上面放棋子

 

二:执行时间

 

在构建窗体的时候执行

在窗体update的时候执行

系统认为窗口需要重新绘制的时候执行

也就是说我们每一次在调用这个函数的时候都会重新绘制一个界面,那么我们在绘制界面的时候要考虑的问题就是怎么通过坐标的形式把相应的棋子放在正确的位置上面去。

解决这个问题的方法就是在board头文件里面加一个_s[]数组,用这个数组来存储每个棋子的位置,到了这一步我们已经知道棋盘怎么绘制了,而且也知道在棋盘上面的每个棋子的位置在哪里了,接下来要考虑的问题就是怎么给这些棋子、棋盘加上相应的图形使之可视化增强,这个时候QT上面强大的库函数就派上用场了。

 

2.1.2棋子绘制

 

绘制棋子的函数为:drawStone(QPainter& painter,int id);这一部分关键点就是通过id找到这个棋子在棋盘上相对应的位置(存在或者不存在),在这个位置的周围画一个圆,这个圆的半径为方格的一半长,画好圆后在圆上进行涂鸦(背景色),接下来就是在圆上面写字了。

这里有一个需要注意的地方,我们鼠标再点击一个棋子的时候,这个棋子的颜色应该是要发生改变的,这样我们才能够知道我们现在下的是哪一个棋子。

所以我们要设置一个全局变量_selectid用来记录当前鼠标的点击位置。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。