转:QT实现阴影窗口(三)

本文介绍如何在没有标准控制按钮的窗口中实现自定义的最大化、最小化和关闭按钮,并通过Qt代码展示了这些按钮的布局及样式设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇讲到了实现用拖动窗口,这篇分享一下实现最大化,最小化窗口。

     一般的窗口都有最大化最小化功能,在WINDOWS系统下,在窗口右上角有相应的按钮,而在MAC系统,相应的按钮是在左上角的。现在我们的窗口是没有最小化最小化和关闭按钮的,要关闭窗口只能用Alt + F4或Esc键。

     这里实现一个最大化,最小化和关闭窗口按钮的部件来代替标准窗口的窗口控制按钮,实现如下:

//WindowControl.h

class WindowControl :
 public QWidget
{
public:
//......

 QPushButton* minButton;
 QPushButton* maxButton;
 QPushButton* closeButton;
 QHBoxLayout* layout;
 QWidget *buttonWidget;
};

 

//WindowControl.cpp

构造函数里面

     layout->setContentsMargins(1, 0, 1, 2);
     layout->setSpacing(1);

     //控件背景
     buttonWidget = new QWidget(this);
     buttonWidget->setStyleSheet(WINDOW_CONTROL_STYLE.arg(":/Images/WindowControlBackground"));

    //最小化按钮
     minButton = new QPushButton(this);
     minButton->setFocusPolicy(Qt::NoFocus);
     minButton->setText("");

    //为了跟标准窗口一样的效果,我为这三个按钮提示了不同状态时的样式。

     minButton->setStyleSheet(BUTTON_STYLE.arg(":/Images/WindowControlMinNormal").arg(":/Images/WindowControlMinHover").arg  (":/Images/WindowControlMinPressed"));
     //minButton->resize(15, 17);
     minButton->setMaximumSize(24, 17);

     //......其他按钮类似
     layout->addWidget(minButton);
     layout->addWidget(maxButton);
     layout->addWidget(closeButton);
     buttonWidget->setLayout(layout);
     outLayout->addWidget(buttonWidget);

     然后在窗口类里加入

    WindowControl* winControl;
    重载大小改变事件,以使得窗口大小变化时,最大化等按钮能显示在正常的位置

    void GraphicDialog::resizeEvent(QResizeEvent *)
    {
       winControl->setGeometry(this->width() - 93 - 6 - 19 - 21, 19, 93, 19);
    }

    这里可以看到右上角像标准窗口一样的效果,但还没有实现最大化和最小化等功能,还有窗口非常地难看,因为窗口的大小大于背景图的大小,被拉伸了,下篇将分享如何解决这个问题以及最大化最小化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值