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

新手求教使用QMdiArea后子窗口显示在顶层问题

6
回复
11246
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2017-3-1 09:52:31 显示全部楼层 |阅读模式
1Qter豆
我做的项目里,在MainWindow下面还有两层子窗口. 我把第一层子窗口都放在了MainWindow下面的MdiArea中,显示没有问题. 但是在这一层子窗口中直接new的QDialog却都在顶端显示, 把MdiArea设置WindowStaysOnTop也没有用.
我现在希望新打开的窗口可以压住之前打开的子窗口下面的子窗口, 应该怎么做呢?

回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-3-1 15:50:26 显示全部楼层
没有听明白你描述的需求。。。你可以表述的清楚一点,或者把代码贴上来。
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-3-1 20:34:47 显示全部楼层
wdmxtk002 发表于 2017-3-1 15:50
没有听明白你描述的需求。。。你可以表述的清楚一点,或者把代码贴上来。 ...

不好意思....
就比如下面这段代码:
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6.     this->setWindowState(Qt::WindowMaximized);

  7.     QMdiArea *mdiArea = new QMdiArea(this);
  8.     this->setCentralWidget(mdiArea);

  9.     QDialog *dialogA = new QDialog(this);
  10.     dialogA->setWindowTitle("A");
  11.     dialogA->resize(400,400);

  12.     QDialog *dialogB = new QDialog(this);
  13.     dialogB->setWindowTitle("B");
  14.     dialogB->resize(400,400);

  15.     QMdiSubWindow *subA = mdiArea->addSubWindow(dialogA);
  16.     subA->resize(dialogA->size());
  17.     QMdiSubWindow *subB = mdiArea->addSubWindow(dialogB);
  18.     subB->resize(dialogB->size());


  19.     QDialog *dialogC = new QDialog(dialogA);
  20.     dialogC->setWindowTitle("C");
  21.     dialogC->resize(300,300);

  22.     QPushButton *openC = new QPushButton("openC",dialogA);
  23.     connect(openC,SIGNAL(clicked()),dialogC,SLOT(show()));

  24. }
复制代码


dialogA,B是mdiArea的subwindow, dialogC是dialogA的子窗口. 当C显示时, 总是会压在A和B的上面.
而我希望当A窗口或B窗口激活时可以覆盖C, 怎么实现呢?
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-3-2 09:03:05 显示全部楼层
想覆盖c就把c和ab同级别就行了。A dialog is always a top-level widget, but if it has a parent, its default location is centered on top of the parent. It will also share the parent's taskbar entry.文档上写的很清楚
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-3-2 14:15:25 显示全部楼层
wdmxtk002 发表于 2017-3-2 09:03
想覆盖c就把c和ab同级别就行了。A dialog is always a top-level widget, but if it has a parent, its def ...

但在我的工程里, C是在类A里面定义的, 如果我要让C与A,B同级的话是不是只能把C设成public, 然后在添加A为subwindow的地方同时添加C呢? 但是这样的话C就不能在点击按键时再实时创建了.
我试了下在A里获取它的parentWidget()只能获得subwindow但不能获取mdiArea, 有没有什么办法在A里面设置使得C与它们同级呢?
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2017-3-3 08:34:42 显示全部楼层
简单办法就是不给c设父窗体,然后A关闭的时候手动去关闭c
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-3-3 14:27:48 显示全部楼层
wdmxtk002 发表于 2017-3-3 08:34
简单办法就是不给c设父窗体,然后A关闭的时候手动去关闭c

找到办法了....一个很麻烦的办法, 给C设的父窗是A的3JparentWidget.... 虽然笨但是好在实现我要的效果了
谢谢啦
回复

使用道具 举报

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

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