qt 怎么自定义标题栏。带最大化最小化 和log
时间: 2023-12-26 10:11:48 浏览: 189
可以使用Qt的QMainWindow类来自定义标题栏。
首先,需要将窗口的标题栏隐藏起来,可以使用setWindowFlags函数来实现:
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
这里使用了Qt::FramelessWindowHint
参数来隐藏窗口的标题栏,Qt::WindowSystemMenuHint
参数来显示窗口的系统菜单,Qt::WindowMinMaxButtonsHint
参数来显示窗口的最大化和最小化按钮。
接下来,需要在窗口中添加自定义的标题栏。可以使用QWidget来实现,将其作为QMainWindow的子控件添加到窗口中:
QWidget *titleBar = new QWidget(this);
titleBar->setObjectName("TitleBar");
titleBar->setStyleSheet("QWidget#TitleBar{background-color: #F0F0F0;}");
titleBar->setFixedHeight(30);
QHBoxLayout *layout = new QHBoxLayout(titleBar);
layout->setMargin(0);
layout->setSpacing(0);
QLabel *titleLabel = new QLabel(titleBar);
titleLabel->setText("My Title");
titleLabel->setStyleSheet("QLabel{font-size: 14px;color: #333333;}");
layout->addWidget(titleLabel);
layout->addStretch();
QToolButton *minButton = new QToolButton(titleBar);
minButton->setObjectName("MinButton");
minButton->setStyleSheet("QToolButton{border:none;background-color:transparent;}"
"QToolButton:hover{background-color:#E0E0E0;}"
"QToolButton:pressed{background-color:#D0D0D0;}");
minButton->setIcon(QIcon(":/titlebar/minimize.png"));
minButton->setFixedSize(30, 30);
layout->addWidget(minButton);
QToolButton *maxButton = new QToolButton(titleBar);
maxButton->setObjectName("MaxButton");
maxButton->setStyleSheet("QToolButton{border:none;background-color:transparent;}"
"QToolButton:hover{background-color:#E0E0E0;}"
"QToolButton:pressed{background-color:#D0D0D0;}");
maxButton->setIcon(QIcon(":/titlebar/maximize.png"));
maxButton->setFixedSize(30, 30);
layout->addWidget(maxButton);
QToolButton *closeButton = new QToolButton(titleBar);
closeButton->setObjectName("CloseButton");
closeButton->setStyleSheet("QToolButton{border:none;background-color:transparent;}"
"QToolButton:hover{background-color:#E0E0E0;}"
"QToolButton:pressed{background-color:#D0D0D0;}");
closeButton->setIcon(QIcon(":/titlebar/close.png"));
closeButton->setFixedSize(30, 30);
layout->addWidget(closeButton);
setMenuWidget(titleBar);
这里创建了一个名为"titleBar"的QWidget作为窗口的标题栏,设置了其背景颜色和固定高度。然后创建了一个水平布局并添加了一个QLabel、一个最小化按钮、一个最大化按钮和一个关闭按钮。最后将标题栏设置为窗口的菜单控件,用于显示系统菜单。
需要注意的是,上面的代码中使用了三个图标文件,需要将它们添加到Qt项目中,并在代码中使用正确的路径。
<RCC>
<qresource prefix="/titlebar">
<file>minimize.png</file>
<file>maximize.png</file>
<file>close.png</file>
</qresource>
</RCC>
最后,需要在窗口中实现标题栏按钮的功能。可以在按钮的clicked信号中实现最小化、最大化和关闭窗口的功能:
connect(minButton, &QToolButton::clicked, this, &QMainWindow::showMinimized);
connect(maxButton, &QToolButton::clicked, this, &QMainWindow::showMaximized);
connect(closeButton, &QToolButton::clicked, this, &QMainWindow::close);
这里使用了Qt的槽函数机制来实现按钮的功能。
完整的示例代码可以参考下面的链接:
https://github.com/qt/qtbase/blob/dev/examples/widgets/widgets/framelesswindow/main.cpp
相关推荐















