Qt中实现无边框的窗体
来源:互联网 发布:怎么看windows 版本 编辑:程序博客网 时间:2024/05/22 14:00
1. 自定义窗体类继承自QWidget
2. 在构造函数中设置无边框
setWindowFlags(Qt::FramelessWindowHint);//无边框setAttribute(Qt::WA_TranslucentBackground);//背景透明
3. 实现鼠标拖动窗口
无边框窗口没有了标题栏,无法通过鼠标来移动窗口。可行的方法是重写窗口的鼠标按下,移动和释放等事件。
为了模拟类似拖动标题栏来移动窗口,可以规定当鼠标单击在某个特定的区域(例如顶部高度为100的矩形区域)才能移动窗口。
下面是一个无边框背景透明的窗体类的代码:
//头文件:BaseWidget.h#ifndef BASEWIDGET_H#define BASEWIDGET_H#include <QWidget>#include <QMouseEvent>//继承自QWidget的自定义窗口,单击(左右键皆可)窗口并移动鼠标可拖动窗口class BaseWidget : public QWidget{ Q_OBJECTpublic: explicit BaseWidget(QWidget *parent = 0); //设置鼠标按下可移动窗口的区域,在子窗口中必须设置该区域 void setAreaMovable(const QRect rt);protected: void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *);private: QRect m_areaMovable;//可移动窗口的区域,鼠标只有在该区域按下才能移动窗口 bool m_bPressed;//鼠标按下标志(不分左右键) QPoint m_ptPress;//鼠标按下的初始位置};#endif // BASEWIDGET_H源文件:BaseWidget.cpp#include "basewidget.h"#include <QDebug>BaseWidget::BaseWidget(QWidget *parent) : QWidget(parent){ //设置无边框透明 setWindowFlags(Qt::FramelessWindowHint);//无边框 setAttribute(Qt::WA_TranslucentBackground);//背景透明 m_areaMovable = geometry(); m_bPressed = false;}void BaseWidget::mousePressEvent(QMouseEvent *e){ //鼠标左键 if(e->button() == Qt::LeftButton) { m_ptPress = e->pos(); qDebug() << pos() << e->pos() << m_ptPress; m_bPressed = m_areaMovable.contains(m_ptPress); }}void BaseWidget::mouseMoveEvent(QMouseEvent *e){ if(m_bPressed) { qDebug() << pos() << e->pos() << m_ptPress; move(pos() + e->pos() - m_ptPress); }}void BaseWidget::mouseReleaseEvent(QMouseEvent *){ m_bPressed = false;}//设置鼠标按下的区域void BaseWidget::setAreaMovable(const QRect rt){ if(m_areaMovable != rt) { m_areaMovable = rt; }}
4 模拟“最大化”“最小化”“关闭”按钮
最简单的方式是采用布局,在窗口顶部左侧一次放“最大化”“最小化”“关闭” 3个按钮,实现对应的功能即可。
如果想快速实现无边框的窗体,只需继承BaseWidget 类即可。
0 0
- Qt中实现无边框的窗体
- Qt实现无边框窗体的移动
- QT实现无边框的可移动窗体
- qt 移动无边框的窗体
- C#中实现无边框窗体拖动
- Qt:移动无边框窗体
- Qt - 移动无边框窗体
- Qt移动无边框窗体
- Qt 设置窗体无边框
- Qt:移动无边框窗体
- wpf中无边框窗体的问题
- Qt 无边框窗体改变大小 完美实现
- Qt 无边框窗体改变大小 完美实现
- Qt中设置QML窗体无边框和背景透明
- QT实现无边框窗体的最小化,最大化/还原,关闭,拖动和双击最大化等功能
- 【Qt】无边框窗体中带有ActiveX组件时的一个BUG
- 实现无边框窗体的拖动及窗体大小变化
- QT 无边框窗体最大化 遮挡windows任务栏的问题
- 第六周 项目4-静态成员应用
- UVa1585 Score
- 第6周项目1-分数类的雏形(4)
- Intellij IDEA15:常用快捷键
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Qt中实现无边框的窗体
- 软件开发考虑几点
- 冒泡法排序
- C++作业3/2
- html5-canvas
- linux安装memcache文档
- Node.js 究竟是什么?
- ACM内部函数--数学问题--最大公约数最小公倍数
- 工作总结