在Qt下面,以QMainWindow为主框架,QMenuBar或者QMenu为菜单栏,QToolBar 为工具栏,QWindget为绘图区,下面是QStatusBar为状态栏,
QWinget为绘图区,所有的图形绘制都要在这里面进行(暂时没有学习后面的东西)
QMainWindow下面可以直接添加QMenuBar,QMenu
QMainWindow添加QToolBar
QMainWindow设置QWinget区域。
QMainWindow设置QStatusBar。
QToolBar显示并做出命令响应需要添加QAction的action对象。、action对象设置Icon或者ToolBar文字显示,
Action对象发出Signal(信号),由QMainWindow的slot(槽)接受,
此时并不能显示,QMainWindow的Slot(槽)接受信号的同时,激活QMainWindow的信号,即为changeCurrentStatus(改变现在状态的信号),此信号再连接QWinget的Slot,QWinget的Slot接收到信号之后产生QWinget的事件,即绘图,此时的画出的Line和或者Rectangle才会显示。
QWinget窗口绘制图形需要override(重写)
Void PaintEvent(QPaintEvent *)函数,重写该函数需要直接与QPaint类打交道,QPaint函数就是Qt中用来绘图的函数,细节就不多讲。
但是这里还有一个问题,即QWinget每次绘图是将窗口里面所有内容重绘,即此时产生的事件是只绘制一个Line或者Rectangle,但是图片上要显示的要包括以前绘制的图形,所以需要一个QList保存以前绘制的图形,然后每次绘制的时候将以前的都重新绘制一遍,而且顺序要和以前一样。
还有一个问题就是基本的c++的问题,QList的里面保存的对象到底是Line还是Rectangle如果还有其他的图形如Ellipse,那到底应该是哪一种,这个就是c++的多态性了,
C++中将Line,Rectangle和Ellipse还有其他的图形抽象为
Class Shape Shape设置为虚基类,添加绘制图形的虚函数
{
Public:
Void virtual paint(QPaint &painter);
}
下面画出几个类之间的关系图。


1073

被折叠的 条评论
为什么被折叠?



