找回密码
 立即注册
收起左侧

关于UI界面中的窗口覆盖问题?

11
回复
10960
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2018-3-26 20:39:16 显示全部楼层 |阅读模式
1Qter豆
任务要求是做一个画圆的程序这是我的UI图形界面,在UI界面用了GridLayout布局(名字取的是Lay),创建了一个DrawWindow类用于提供画圆形的窗口(我设置背景色为蓝色)代码如图,然后我在这里Widget里面设置了主布局,,这样之后运行按道理不是Lay控制的上图界面在左边,然后蓝色窗口在右边吗?为什么我运行后是蓝色覆盖了。

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-26 20:40:36 显示全部楼层
补充,如果我在UI里面不用布局管理,在Widget.CPP里面创建一个Gridlayout然后把控件一个个手动代码丢进去,然后在放到主布局管理器里面就可以不出现覆盖,所以是因为是UI的问题吗?这是QT的什么原因。新手,求大神指点
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-26 21:56:03 显示全部楼层
ivy850830 发表于 2018-3-26 20:40
补充,如果我在UI里面不用布局管理,在Widget.CPP里面创建一个Gridlayout然后把控件一个个手动代码丢进去, ...

自己顶一下,求大佬~~~
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-3-26 22:31:03 显示全部楼层
本帖最后由 miroox 于 2018-3-26 22:32 编辑

先抛开这个问题,其实ui设计师里可以通过“提升为...”添加自定义部件的。
至于这个覆盖现象,应该是调用ui->setup(this)会设置layout的parent的副作用。你可以试试先把一个layout的parent设为A,再把它添加到另一个部件B的layout中,看会不会出现类似的问题。
-----

找到一个类似的问题 https://stackoverflow.com/questions/10519006/qwidgetsetlayout-attempting-to-set-qlayout-on-widget-which-already-has
回复

使用道具 举报

尚未签到

2018-3-27 11:02:22 显示全部楼层
试试:
wgt=new DrawWindow(this);
QHBoxLayout *mainLayout=new QHBoxLayout();//去掉this
mainLayout->addLayout(ui->lay);
mainLayout->addWidget(wgt);

this->setLayout(mainLayout);//增加此句
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-27 16:24:44 显示全部楼层
miroox 发表于 2018-3-26 22:31
先抛开这个问题,其实ui设计师里可以通过“提升为...”添加自定义部件的。
至于这个覆盖现象,应该是调用ui ...

如果是这样的话,我UI里面的布局Parent是this ,我不用UI 2个布局在CPP里面写的画,创建时候这么写
QGridlayout *lay=new QGridLayout();不是一样默认是this 么。。这种情况就不会覆盖。

点评

单纯这样 lay 是没有 parent 的, 通过才会将 lay 的 parent 设为 this 。  详情 回复 发表于 2018-3-27 21:07
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-27 16:31:19 显示全部楼层
miroox 发表于 2018-3-26 22:31
先抛开这个问题,其实ui设计师里可以通过“提升为...”添加自定义部件的。
至于这个覆盖现象,应该是调用ui ...

C:\Users\**\Desktop这个是生成的UI文件代码。我是新手有点看不出端倪。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

对啊,在这段代码里, 已经把 lay 的 parent 设为了 gridLayoutWidget ,而根据这个问题下面的回答,已经有 parent 的 layout 再通过 addLayout() 添加到其它 layout 里会出现问题。 解决办法就是要么全手写,要么  详情 回复 发表于 2018-3-27 21:22
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-3-27 21:07:17 显示全部楼层
ivy850830 发表于 2018-3-27 16:24
如果是这样的话,我UI里面的布局Parent是this ,我不用UI 2个布局在CPP里面写的画,创建时候这么写
QGrid ...
  1. QGridlayout *lay=new QGridLayout();
复制代码

单纯这样 lay 是没有 parent 的,
通过
  1. this->setLayout(lay);
复制代码
才会将 lay 的 parent 设为 this 。
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-3-27 21:22:28 显示全部楼层
ivy850830 发表于 2018-3-27 16:31
这个是生成的UI文件代码。我是新手有点看不出端倪。。

对啊,在这段代码里,
  1. lay = new QGridLayout(gridLayoutWidget);
复制代码

已经把 lay 的 parent 设为了 gridLayoutWidget ,而根据这个问题下面的回答,已经有 parent 的 layout 再通过 addLayout() 添加到其它 layout 里会出现问题。
解决办法就是要么全手写,要么全用设计师进行布局,不要用设计师布局后又手动改变布局。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-28 19:05:14 显示全部楼层
miroox 发表于 2018-3-27 21:22
对啊,在这段代码里,

已经把 lay 的 parent 设为了 gridLayoutWidget ,而根据这个问题下面的回答,已 ...

但是如果全用布局管理器怎么写呢,因为另外一个绘图窗口是另外一个类的界面啊。。不在一个类里面怎么在一个UI里面布局?

点评

我最开始说了的啊... 另一个类不是继承自QWidget吗,在UI设计师里先放置一个QWidget,再把它“提升为”你自定义的那个类就行了。  详情 回复 发表于 2018-3-29 10:16
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-3-28 19:47:47 显示全部楼层
miroox 发表于 2018-3-27 21:22
对啊,在这段代码里,

已经把 lay 的 parent 设为了 gridLayoutWidget ,而根据这个问题下面的回答,已 ...

不用UI的布局的话, QGridLayout * lay=new QGridlayout();//没有父窗口;
然后QHBoxlayout *mainLayout =new QHboxlayout(this); //以(widget为父窗口)
  mainLayout->addLayout(lay);//此时是不是把lay的父窗口设置为了mainLayout??(这么理解对吗?感觉mainlayout 也不算一个窗口吧。。。)
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-3-29 10:16:50 显示全部楼层
ivy850830 发表于 2018-3-28 19:05
但是如果全用布局管理器怎么写呢,因为另外一个绘图窗口是另外一个类的界面啊。。不在一个类里面怎么在一 ...

我最开始说了的啊...
先抛开这个问题,其实ui设计师里可以通过“提升为...”添加自定义部件的。

另一个类不是继承自QWidget吗,在UI设计师里先放置一个QWidget,再把它“提升为”你自定义的那个类就行了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了