转: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);
}
这里可以看到右上角像标准窗口一样的效果,但还没有实现最大化和最小化等功能,还有窗口非常地难看,因为窗口的大小大于背景图的大小,被拉伸了,下篇将分享如何解决这个问题以及最大化最小化。
一般的窗口都有最大化最小化功能,在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);
}
这里可以看到右上角像标准窗口一样的效果,但还没有实现最大化和最小化等功能,还有窗口非常地难看,因为窗口的大小大于背景图的大小,被拉伸了,下篇将分享如何解决这个问题以及最大化最小化。
相关文章推荐
- QT笔记之实现阴影窗口
- Qt 自定义窗口实现带阴影的圆角窗口
- 转:QT实现阴影窗口(一)
- Qt:基于widget方式的窗口阴影边框的实现
- Qt5 圆角加阴影窗口简单实现
- 转:QT实现阴影窗口(二)
- Qt实现顶层窗口特效--阴影和圆角
- Qt/QML 窗口阴影边框实现
- Qt/QML窗口阴影边框实现
- 隐藏QT窗口边框 并且在隐藏后实现窗口拖拽 同时实现透明度
- qt 实现停靠窗口 效果
- Qt实现窗口tabwidget的拖出双击弹回功能
- Qt5:Qt中屏幕或窗口截图功能的实现
- QT如何实现置顶窗口
- 利用窗口类寻找窗口 与 qt窗口吸附的实现
- QT实现窗口跳转
- qt实现点击输入框弹出输入面板和改变窗口的位置
- QT实现控件自动适合窗口大小
- [MFC] WS_EX_LAYERED 实现透明异形窗口(酷狗歌词、360加速球、窗口边缘阴影)
- Qt实现基本QMainWindow主窗口程序