qt c++ 去除mdiarea控件中子窗口Qwidget标题栏中的关闭按钮
时间: 2023-10-30 16:05:57 浏览: 301
可以通过重载子窗口的 `showEvent` 函数,在子窗口显示时移除标题栏的关闭按钮。具体步骤如下:
1. 定义一个新的 `QWidget` 类,继承自 `QWidget`。
2. 在新类中重载 `showEvent` 函数。
3. 在 `showEvent` 函数中找到子窗口的标题栏,并且移除标题栏的关闭按钮。
下面是示例代码:
```c++
#include <QEvent>
#include <QLayout>
#include <QLabel>
#include <QPushButton>
#include <QStyle>
#include <QStyleOption>
#include <QToolButton>
#include <QWidget>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget* parent = nullptr)
: QWidget(parent)
{}
protected:
void showEvent(QShowEvent* event) override
{
QWidget::showEvent(event);
auto mdiArea = parentWidget();
if (!mdiArea)
return;
auto subWindow = mdiArea->findChild<QWidget*>("qt_mdiarea_viewport");
if (!subWindow)
return;
auto subLayout = subWindow->layout();
if (!subLayout)
return;
auto titleBar = subLayout->itemAt(0)->widget();
if (!titleBar)
return;
auto closeButton = titleBar->findChild<QToolButton*>("qt_subwindow_button");
if (closeButton)
closeButton->hide();
}
};
```
在使用 `QMainWindow` 中使用 `MyWidget` 类替换 `QWidgets` 作为子窗口,即可在子窗口显示时去除标题栏的关闭按钮。
阅读全文