QT自定义标题栏窗口最大最小相关问题解决方法

1:实现qt窗口最大最小化:最小化showMinimized(),最大化showMaximized(),全屏showFullScreen(),正常showNormal();
2:最大最小失效:
原因:固定了窗口大小:如setFixedSize();setMaximumSize();setMinimumSize(),设置了这些相关固定大小的功能后,最大最小就会失效,该问题在5.11及5.11以上会遇到;在5.7及5.7以下版本中没有这个问题.所以在5.11的版本中既想设置固定大小,又想最大最小生效,可以使用
this->setWindowFlags(Qt::WindowMinimizeButtonHint),
this->setWindowFlags(Qt::WindowMaximizeButtonHint),来强行突破规则,但是该方法在5.7等以下版本会出现强行显示标题栏的问题.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用Qt的QMainWindow类来自定义标题栏。 首先,需要将窗口标题栏隐藏起来,可以使用setWindowFlags函数来实现: ```cpp setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint); ``` 这里使用了`Qt::FramelessWindowHint`参数来隐藏窗口标题栏,`Qt::WindowSystemMenuHint`参数来显示窗口的系统菜单,`Qt::WindowMinMaxButtonsHint`参数来显示窗口最大化和最小化按钮。 接下来,需要在窗口中添加自定义标题栏。可以使用QWidget来实现,将其作为QMainWindow的子控件添加到窗口中: ```cpp 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项目中,并在代码中使用正确的路径。 ```qrc <RCC> <qresource prefix="/titlebar"> <file>minimize.png</file> <file>maximize.png</file> <file>close.png</file> </qresource> </RCC> ``` 最后,需要在窗口中实现标题栏按钮的功能。可以在按钮的clicked信号中实现最小化、最大化和关闭窗口的功能: ```cpp 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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值