资源简介
Qt无边框窗口可以使用重载鼠标的方法去实现窗口缩放功能,但是会存在窗口抖动效果,但调用系统的API接口,可以在窗口缩放的时候避免出现窗口抖动情况,但是唯一缺点是不支持跨平台
代码片段和文件信息
#include “frameless.h“
frameLess::frameLess(QWidget *parent)
: QDialog(parent)
{
this->setWindowFlags(Qt::framelessWindowHint | Qt::WindowSystemMenuHint); // 设置成无边框对话框
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_SIZEWE)));
//SendMessage(WM_SYSCOMMAND SC_SIZE | WMSZ_TOP MAKELPARAM(point.x point.y));
setMinimumSize(100 100);
setMaximumSize(8000 7000);
}
frameLess::~frameLess()
{
}
void frameLess::region(const QPoint &cursorGlobalPoint bool &activeFlag)
{
QRect rect = this->rect();
QPoint tl = mapToGlobal(rect.topLeft());
QPoint rb = mapToGlobal(rect.bottomRight());
int x = cursorGlobalPoint.x();
int y = cursorGlobalPoint.y();
activeFlag = true;
if (tl.x() + PADDING + 2 >= x && tl.x() <= x && tl.y() + PADDING + 2 >= y && tl.y() <= y) {
// 左上角
dir = LEFTTOP;
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else if (x >= rb.x() - PADDING - 2 && x <= rb.x() && y >= rb.y() - PADDING - 2 && y <= rb.y()) {
// 右下角
dir = RIGHTBOTTOM;
this->setCursor(QCursor(Qt::SizeFDiagCursor));
}
else if (x <= tl.x() + PADDING + 2 && x >= tl.x() && y >= rb.y() - PADDING - 2 && y <= rb.y()) {
//左下角
dir = LEFTBOTTOM;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else if (x <= rb.x() && x >= rb.x() - PADDING - 2 && y >= tl.y() && y <= tl.y() + PADDING + 2) {
// 右上角
dir = RIGHTTOP;
this->setCursor(QCursor(Qt::SizeBDiagCursor));
}
else if (x <= tl.x() + PADDING && x >= tl.x()) {
// 左边
dir = LEFT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else if (x <= rb.x() && x >= rb.x() - PADDING) {
// 右边
dir = RIGHT;
this->setCursor(QCursor(Qt::SizeHorCursor));
}
else if (y >= tl.y() && y <= tl.y() + PADDING) {
// 上边
dir = UP;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else if (y <= rb.y() && y >= rb.y() - PADDING) {
// 下边
dir = DOWN;
this->setCursor(QCursor(Qt::SizeVerCursor));
}
else {
// 默认
dir = NONE;
this->setCursor(QCursor(Qt::ArrowCursor));
activeFlag = false;
}
}
bool frameLess::nativeEventFilter(const QByteArray &eventType void *message long *result)
{
if (eventType == “windows_generic_MSG“ || eventType == “windows_dispatcher_MSG“)
{
MSG* msg = (MSG*)message;
if (msg->message == WM_MOUSEMOVE)
{
QPoint pt = cursor().pos();
bool activeFlag;
region(pt activeFlag);
if (activeFlag)
{
switch (dir)
{
case UP:
case DOWN:
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_SIZENS)));
break;
case LEFT:
case RIGHT:
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_SIZEWE)));
break;
case LEFTTOP:
case RIGHTBOTTOM:
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_SIZENWSE)));
break;
case RIGHTTOP:
case LEFTBOTTOM:
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_SIZENESW)));
break;
case NONE:
default:
SetCursor(LoadCursor(NULL MAKEINTRESOURCE(IDC_ARROW)));
return
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-06-18 17:05 fr
目录 0 2019-06-18 17:04 fr
文件 1075 2019-06-18 17:03 fr
文件 35622912 2019-06-18 17:04 fr
目录 0 2019-06-18 17:05 fr
文件 5111 2019-06-18 16:59 fr
文件 819 2019-06-18 17:04 fr
文件 8076 2019-06-18 17:02 fr
文件 1741 2019-06-18 17:02 fr
文件 631 2019-06-18 17:04 fr
目录 0 2019-06-18 17:03 fr
目录 0 2019-06-18 17:03 fr
文件 2802 2019-06-18 17:04 fr
文件 250 2019-06-18 17:03 fr
目录 0 2019-06-18 17:00 fr
目录 0 2019-06-18 17:00 fr
目录 0 2019-06-18 17:05 fr
相关资源
- QT聊天系统
- edgenet.tar.gz
- OpenCV345_build_MinGW32bit
- Qt+pcl+vtk 屏幕选点
- 我们自己写的浏览器源代码
- QxEntityEditor_1.2.5_setup_win64
- Opencv+VS米粒图像处理实验源代码
- IEC-104规约Qt实现
- 基于QT和windows api实现的远程桌面控制
- ACE编程超全面
- VTK使用手册VTKUsersGuide
- labelImg_qt5py3_mac_latest 2.zip
- OpenCV 3和Qt5计算机视觉应用开发英文版
- 海康工业相机二次开发源码 + OpenCV3
- QT5开发及各种
- VS+CSocket实现网络聊天,可发文件Wor
- 嵌入式linux下QT开发的mp3播放器源码
- 基于Winpcap实现抓取数据包
- 南京公交线路查询
- 图像细化算法
- GSL库(64bit)在QT5.50中使用+VS2013编译
- Visual C 6.0
- PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe
- 编译器mingw4.4.0 Qt
- OpenCV实现SfM:双目三维重建
- podofo vs2010 x86编译好的库
- 用PyQT5多线程爬取轻小说工具
- 国际象棋马的遍历 贪心算法
- PyQt5开发与实战源代码
- 基于opencv的图片旋转实现
评论
共有 条评论