【问题标题】:How to show / hide Qt window border如何显示/隐藏 Qt 窗口边框
【发布时间】:2014-08-12 19:20:54
【问题描述】:

我有一个 Qt 对话框自定义的问题。该对话框包含一个图像(带有像素图的 QLabel)和一个带有按钮的面板。默认情况下,对话框没有标题栏和边框,面板不可见。 当我单击显示的图像时,面板变得可见,并且边框也应该可见,以便用户可以调整对话框的大小。

设置面板可见或不可见很容易,隐藏开头的边框也很清楚:

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);

但是

我无法恢复窗口的边框。我试过这个:

// this is in the header

Qt::WindowFlags m_wndFlags;

// this is in the cpp

dlgImageWindow::dlgImageWindow()
{
   Qt::WindowFlags m_wndFlags = windowFlags();

   setWindowFlags( Qt::Dialog | Qt::FramelessWindowHint );
}

... // border is hidden

void dlgImageWindow::_showBorder()
{
  setWindowFlags( m_wndFlags );
}

不幸的是,整个对话框都消失了。 有什么想法吗?

【问题讨论】:

  • 实际上我的问题通过添加 'show();' 解决了'setWindowFlags...' 过程之后的行。我不知道为什么 setWindowFlags 隐藏了整个窗口,但确实如此。实际上,上面的代码可以按预期恢复边框,并且通过显示过程,窗口仍然可见。
  • 是的……谢谢 timday! “此函数在更改窗口的标志时调用 setParent(),导致小部件被隐藏。您必须调用 show() 才能使小部件再次可见..”

标签: c++ qt


【解决方案1】:

可能是因为你使用了

Qt::WindowFlags m_wndFlags = windowFlags();

将当前窗口标志分配给语言环境变量,this->m_wndFlags 永远不会被正确设置

【讨论】:

    【解决方案2】:

    Zaiborg:感谢您的回答。其实上面的代码有点简化,仅供参考。

    问题是当我使用 setWindowFlags() 过程时窗口消失了。

    在 cmets 'timday' 链接的另一个会话中,通过在 setWindowFlags() 之后调用 show() 过程引发并解决了类似问题。

    在我使用 show() 过程后,发现我的过程符合规范。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多