自制扫雷遇到的一些问题

王大贵 2014-12-17 05:44:20
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都有这个问题,视觉上都是主窗体缩的只剩菜单栏,然后又变回新大小

我想问下,有没有办法消除这种变化
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿良良木月火 2014-12-29
  • 打赏
  • 举报
回复
最好是把你的方法分享给更多人。
Inhibitory 2014-12-28
  • 打赏
  • 举报
回复
最好是把你的方法分享给更多人。
王大贵 2014-12-28
  • 打赏
  • 举报
回复
问题自己解决了。来个人接分。。

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧