Qt之自定义界面(窗体缩放)
Qt 自定义 界面 窗体 缩放
2023-09-14 08:56:50 时间
通过前两节内容,我们实现了自定义窗体的移动,以及自定义标题栏-用来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭。
在这之后,我们还缺少窗体的缩放-当鼠标移动到窗体的边框-左、上、右、下、左上角、左下角、右上角、右下角时候,鼠标变为相应的样式,并且窗体可以随着鼠标拖动而进行放大、缩小。
bool Widget::nativeEvent(const QByteArray eventType, void *message, long *result) Q_UNUSED(eventType) MSG *param = static_cast MSG * (message); switch (param- message) case WM_NCHITTEST: int nX = GET_X_LPARAM(param- lParam) - this- geometry().x(); int nY = GET_Y_LPARAM(param- lParam) - this- geometry().y(); // 鼠标区域位于标题栏按钮之上,则不进行处理 QList QPushButton * buttons = m_pTitleBar- findChildren QPushButton * foreach (QPushButton *pButton, buttons) if (pButton- geometry().contains(QPoint(nX, nY))) *result = HTCLIENT; return true; // 鼠标区域位于标题栏中,进行移动 if (nX = m_nBorder nX = this- width() - m_nBorder nY = m_nBorder nY = m_pTitleBar- height()) *result = HTCAPTION; return true; // 鼠标区域位于窗体边框,进行缩放 if ((nX 0) (nX m_nBorder)) *result = HTLEFT; if ((nX this- width() - m_nBorder) (nX this- width())) *result = HTRIGHT; if ((nY 0) (nY m_nBorder)) *result = HTTOP; if ((nY this- height() - m_nBorder) (nY this- height())) *result = HTBOTTOM; if ((nX 0) (nX m_nBorder) (nY 0) (nY m_nBorder)) *result = HTTOPLEFT; if ((nX this- width() - m_nBorder) (nX this- width()) (nY 0) (nY m_nBorder)) *result = HTTOPRIGHT; if ((nX 0) (nX m_nBorder) (nY this- height() - m_nBorder) (nY this- height())) *result = HTBOTTOMLEFT; if ((nX this- width() - m_nBorder) (nX this- width()) (nY this- height() - m_nBorder) (nY this- height())) *result = HTBOTTOMRIGHT; return true; return QWidget::nativeEvent(eventType, message, result); }
nativeEvent主要用于进程间通信-消息传递。在这里我们主要进行窗体缩放,其中还添加了一些限制,比如:
使用这种方式后,窗体就可以随意缩放了,而且可以去掉标题栏中控制界面移动的代码-在mousePressEvent中使用SendMessage来进行移动。
当然,这种实现只能在Windows下使用,因为用的是Win API,如果需要跨平台的话,需要自己处理各种事件,而且得考虑的很全面。
C/C++ Qt MdiArea 多窗体组件应用 MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们所有的窗体创建与操作都在这个容器内进行,如下我们将具体介绍该组件的常用使用技巧。
C/C++ Qt TabWidget 实现多窗体创建 在开发窗体应用时通常会伴随分页,TabWidget组件配合自定义Dialog组件,可实现一个复杂的多窗体分页结构,此类结构也是ERP等软件通用的窗体布局方案。
Qt编写自定义控件48-面板窗体控件 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到,比如温湿度设备面板,有几百个温湿度设备,需要一个容器放置,自动产生滚动条,可以设置面板的固定宽高或者自适应拉伸,其实就是放了表格布局+弹簧来设置。
Qt编写数据可视化大屏界面电子看板6-窗体打开关闭 二级窗体的打开与关闭,这个功能也很有必要,由于整个系统中各种模块数量窗体数量比较多,后期可能还会增加更多,在4K屏幕上可以显示很多的模块,但是有时候有些模块不想显示出来,就需要将该模块关闭掉,直接在二级窗体的标题栏上增加关闭按钮,可能会影响整体的布局,此时提供鼠标右键菜单来控制各个模块的...
相关文章
- Qt自定义控件之仪表盘的完整实现
- C/C++ Qt 运用JSON解析库 [解析篇]
- C/C++ Qt 自定义Dialog对话框组件应用
- C/C++ Qt 数据库与ComBox多级联动
- Qt - 聊天室发送图片/文件
- Qt自绘系列-仪表盘
- 编程在Linux下学习Qt界面编程(linux下qt界面)
- VS中使用Qt方法详解
- Qt读写文件(2种方式)实现详解
- Qt .ui文件的使用
- Linux下Qt环境快速安装指南(linux下qt安装)
- 实现Linux下Qt应用静态编译的方法(linux下qt静态编译)
- Linux下的Qt应用安装指南(qtlinux安装包)
- 构建Linux下Qt开发环境,实现跨平台C开发(linuxqt开发环境)
- Linux编译Qt:一步一步教程(linux编译qt)
- Qt公司正式成立
- Qt for Linux:下载与安装指南(qt下载linux)
- 开启Linux Qt支持中文显示(linuxqt显示中文)
- 分析Linux Qt实例分析:快速掌握开发技术(linuxqt实例)
- Adept Qt to Access Linux Commands(qt调用linux命令)
- 使用 Linux 和 Qt 实现高效应用程序开发(linuxqt使用)
- QT如何访问MySQL数据库(qt访问mysql数据库)
- 使用QT连接MySQL数据库(qt数据库mysql)
- Qt与SQL Server的数据交互技术(qt sqlserver)
- 编辑Linux下使用Qt快速编辑文件(linux下 qt 文件)