2

我使用 aQMainWindow作为我的 main的孩子QMainWindow。这样我就得到了另一个可以用于可停靠小部件的区域(QDockWidget)。

根据以下帖子,这没关系,它对我也很有效。

  1. https://qt-project.org/forums/viewthread/17519
  2. http://www.qtcentre.org/threads/12569-QMainWindow-as-a-child-of-QMainWindow

为了使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

4

1 回答 1

3

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

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

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

没有意义this->windowFlags() & ~Qt::Window:设置唯一标志时,您已经清除了所有其他窗口Qt::Window标志。您可以完全控制这些标志,无需保留一些“其他”标志:没有。

于 2014-07-23T18:05:22.223 回答