PS:一起问了。。
这个扫雷程序上面的雷我是用一个class zButton:public QPushButton来实现的
然后在一个自定义的对话框 class Mineland:public QDialog
我在这个Mineland上放了255个zButton作为雷区(看起来为15X15)
大概看上去是这样的
问题1
就像上面的这个图片,在这225个zButton中,有一个始终处于类似反色的状态,这个是win7的截图,在linux上反色的效果跟加明显,一开始我以为是摸个按钮被设为默认状态,所以我把zButton里设置了Default(false);但结果还是摸个zButton会出现反色的情况,我想问下这个是什么原因造成的,有什么办法消除呢?
问题2
起初我想设定扫雷像win7自带的一样,程序框体能在一定大小范围内拖放大小,但这里牵扯到一个问题,即zButton的长和宽要始终保证相等,但我查遍assistant都没找到对应的方法/函数,在父窗体拉伸的时候,zButton会被拉伸成各种长方形,关于zButton类,为了保证始终是个正方形,我最后不得不用setFixedSize(QSize)直接锁定他的大小
zButton类的基类,有单独返回width和height的函数,但就是没有单独设置width和height的函数
我想问下,有没有办法设置width和height始终相等,就是父窗体无论如何拉伸,zButton的width == heigth
问题3
我最后用了一个class Bomr:public QMainWindow(的centrelWidget)来放置这个Mineland,
Bom有私有成员
Mindland* mineland;
然后Bom的构造函数里有这样的代码
mineland = new Mindland(this);
setCentrelWidget(mineland); // Bom类定义里有Mindland* mineland
然后扫雷结束后,需要重新开始,点击”again"就可以开始另外一局新的游戏
我用一个私有槽来完成这个功能
私有槽函数有这样的代码
mineland = 0; //用于删除已经结束的游戏
mineland = new Mineland(this);
setCentrelWidget(mineland);
但在这个过程中,点击" again" 程序在视觉上的效果是中间中心窗体消失,然后程序边的只剩菜单栏(大小),然后又出现中心窗体,回复原来大小
总之 大 ->小->大
这个过程在win7上可能有0.1秒(一闪而过,但还是能比较清楚的看清程序框体变化),而在linux上这个过程可能有0.5秒的时间,非常明显。
后来我发现只要更换centerlWidget都有这个问题,视觉上都是主窗体缩的只剩菜单栏,然后又变回新大小
我想问下,有没有办法消除这种变化