Qt 隐藏QMdiArea';标题栏

Qt 隐藏QMdiArea';标题栏,qt,qt5,qmdiarea,Qt,Qt5,Qmdiarea,主窗口可以轻松隐藏标题栏使用: setWindowFlags(Qt::CustomizeWindowHint); 但在使用QMdiArea时,例如: ui->mdiArea->setWindowFlags(Qt::CustomizeWindowHint); ui->mdiArea->addSubWindow(child); child->showMaximized(); 事情不可能成功。我也尝试这样做: child->setWindowFlags(Qt::

主窗口可以轻松隐藏标题栏使用:

setWindowFlags(Qt::CustomizeWindowHint);
但在使用QMdiArea时,例如:

ui->mdiArea->setWindowFlags(Qt::CustomizeWindowHint);
ui->mdiArea->addSubWindow(child);
child->showMaximized();
事情不可能成功。我也尝试这样做:

child->setWindowFlags(Qt::CustomizeWindowHint);
这是:

setWindowFlags(Qt::WindowTitleHint);
它仍然显示

那我该怎么办呢

顺便说一句:如果做不到这一点,我可以禁用左侧的3个按钮或重载这些按钮事件。

这对我来说很有效:

child->setWindowFlags(Qt::FramelessWindowHint);
下面是创建QLineEdit子窗口的示例。子窗口没有标题栏:

void MainWindow::on_pushButtonAddSubWindow_clicked(){
  QLineEdit *edit = new QLineEdit(QString("Test"), this);
  QMdiSubWindow *sub = ui->mdiArea->addSubWindow(edit);
  sub->setWindowFlags(Qt::FramelessWindowHint);
  edit->show();
}

@Klathzazt的解决方案正如他所描述的那样对我有效。你也可以使用

auto w = new QWidget();
auto sub_w = area_.addSubWindow(w, 
             Qt::CustomizeWindowHint | Qt::Tool | Qt::WindowTitleHint);
sub_w->show();`<br>to create windows that have only title bar(no buttons).
auto w=new QWidget();
自动子窗口w=区域添加子窗口(w,
Qt::CustomizeWindowint | Qt::Tool | Qt::WindowTitleHint);
sub_w->show()`
创建只有标题栏(没有按钮)的窗口。
我注意到,如果设置其他标志,或设置级联或类似的设置,可能会重置此标志。您的意思是它确实适用于QMdiArea,但我失败了,因为我设置了其他标志?我没有设置其他标志。请参阅@troyane的解决方案,它使用
|
组合窗口功能(而不是您当前的代码,它会盲目地覆盖它们)。通常,为了安全起见,人们会执行
setWindowsFlags(windowFlags()| Qt::FramelessWindowHint)
,以便始终针对当前标志进行设置,而不是覆盖。