浮动子QMainWindow(QMainWindow作为主QMainWindow的子窗口小部件)

时间:2014-07-23 17:30:29

标签: c++ qt qwidget qmainwindow qdockwidget

我使用QMainWindow作为我的主QMainWindow孩子。通过这个我获得了另一个可用于可停靠小部件的区域(QDockWidget)。

根据以下帖子,这没关系,对我来说也很完美。

  1. https://qt-project.org/forums/viewthread/17519
  2. http://www.qtcentre.org/threads/12569-QMainWindow-as-a-child-of-QMainWindow
  3. 为了让QMainWindow表现为普通的小部件,我取消设置了窗口标志,这个技巧在上面的一个帖子中提到。

    现在我还希望能够将这个子QMainWindow与所有停靠的小部件一起浮动。换句话说,我想恢复步骤"使其成为正常的小部件"。不幸的是,这确实不起作用。它从主窗口消失,但根本看不到。

    有什么方法可以解决吗?

    // this is the child QMainWindow
    if (this->m_infoAreaFloating)
    {
        // this should give me a floating window besides the main window
        this->setWindowFlags(Qt::Desktop);
        this->show();
    }
    else
    {
        // make this compliant as QWidget
        this->setWindowFlags(this->windowFlags() & ~Qt::Window);
    }
    

    相关:ab

1 个答案:

答案 0 :(得分:2)

Qt::Desktop标志不是您应该自己设置的。

您需要设置Qt::Window标志:

setWindowFlags(m_infoAreaFloating ? Qt::Window : Qt::Widget);
show();

this->windowFlags() & ~Qt::Window没有意义:在设置单独Qt::Window标志时,您已清除所有其他窗口标记。你完全控制了旗帜,没有必要保留一些"其他" flags:没有。