首页| 论坛| 消息

标题:仿win7窗体自动顶部最大化左侧右侧半屏效果
作者:liudianwu
日期:2017-04-16 10:27
内容:

版主 圣域天子,最近一年多一直在找这个效果,今天一觉醒来,又看到版主在CSDN的Qt板块寻找此效果,特意抽空随手写了下代码,基本实现该效果,纯qt代码实现,没有使用windows API,所以在其他平台上,运行效果一样。
原理:绑定事件过滤器,自动计算当前无边框窗体的位置和鼠标按下去的坐标,当到达顶部或者左侧右侧时,自动设置该窗体的geometry即可。
为了复用代码,我这里绑定的全局事件过滤器,这样只需要无边框窗体界面设置两行即可,无需重复编码。
无边框窗体代码:
this->setProperty("canMove", true);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
核心代码:
#include "appinit.h"
#include "qapplication.h"
#include "qdesktopwidget.h"
#include "qevent.h"
#include "qwidget.h"
#include "qdebug.h"
AppInit *AppInit::self = 0;
AppInit::AppInit(QObject *parent) : QObject(parent)
{
}
bool AppInit::eventFilter(QObject *obj, QEvent *evt)
{
QWidget *w = (QWidget *)obj;
if (!w->property("canMove").toBool()) {
return QObject::eventFilter(obj, evt);
}
//存储桌面宽高以及全屏/左侧半屏/右侧半屏 区域
static int deskWidth = qApp->desktop()->availableGeometry().width();
static int deskHeight = qApp->desktop()->availableGeometry().height();
static QRect fullRect = qApp->desktop()->availableGeometry();
static QRect leftRect = QRect(0, 0, deskWidth / 2, deskHeight);
static QRect rightRect = QRect(deskWidth / 2, 0, deskWidth / 2, deskHeight);
bool autoRect = w->property("autoRect").toBool();
static QPoint mousePoint;
static bool mousePressed = false;
QMouseEvent *event =..


#1 [仗剑天涯 04-16 11:06]

#2 [qing11 04-16 18:29]

#3 [pangwei 04-17 08:37]

#4 [圣域天子 04-17 08:44]
首先感谢楼主。
不过这不是我要的效果,我需要的是系统级的最大化和左右分屏,也就是鼠标没有放手前,有虚框显示最大化的效果。
再次感谢~~~
#5 [boylebao 04-17 09:17]
说白了,就是最大化预览,不过刘大师实现的效果鼠标再次拖动时会变位,拖不准。

<< 1 2 3 >> (1/4)

回复 发表
主题 版块