您的位置:首页 > 编程语言 > Qt开发

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

2011-02-24 15:09 441 查看
上一篇讲到了实现用拖动窗口,这篇分享一下实现最大化,最小化窗口。

一般的窗口都有最大化最小化功能,在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);

}



这里可以看到右上角像标准窗口一样的效果,但还没有实现最大化和最小化等功能,还有窗口非常地难看,因为窗口的大小大于背景图的大小,被拉伸了,下篇将分享如何解决这个问题以及最大化最小化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: