QT之QRect函数QRect::adjust()函数解析

本文通过实例详细解析了QRect中的adjust函数的工作原理,包括如何通过四个参数调整矩形的位置和大小,以及这些参数是如何影响矩形的边界。

开发中使用到QRect的adjust函数,查阅官方文档的解释并不是很明白,索性还是自己动手实践一下:

我们先假定一个起始坐标(20,20),宽和高均为100的矩形,然后我们用drawRect()函数画出来,下图中的绿线所示,然后我们使用adjust(-10,-10,10,10)对该矩形进行调整,使用drawRect()函数画出来的图形为蓝线所示

这里写图片描述

adjust()函数原型为

void QRect::adjust(int dx1, int dy1, int dx2, int dy2)

我们可以这样理解:dx1为相对于原始矩形左上角x坐标的偏移值,dy1为相对于原始矩形左上角y坐标的偏移值,负值表示在矩形外,正值表示在矩形内;dx2和dy2分别是相对于右下角x坐标和y坐标的偏移值,负值表示在矩形内,正值表示在矩形外,正好相反!这点需要注意一下!

在下面这个函数中,ui.verticalWidget->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);和 ui.verticalWidget->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::Tool;的区别是什么? void PlaybackWidget::showFullScreenFromNormal() { ui.btnFullScreen->setStyleSheet(IPCAPP_STYLE_EXIT_FULLSCREEN); setOwner(pWindowPage); pWindowPage->showFullScreenWithPTZ(); showToastInCenterPos(IPC_TR(IPCStringConstant::pcTourroundExitFullscreenToast), TP_TOAST_SHOW_TIME); setMouseTracking(true); pWindowPage->setMouseTracking(true); MONITORINFO monitorInfo = { 0 }; monitorInfo.cbSize = sizeof(MONITORINFO); GetMonitorInfo(MonitorFromWindow((HWND)ui.verticalWidget->winId(), MONITOR_DEFAULTTONEAREST), &monitorInfo); qreal devicePixelRatio = IPCAppInstance::getInstance()->getIPCApplication()->getScaleFactor(this->window()); QRect currentScreenRect(monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top, qCeil((monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left) / devicePixelRatio), qCeil((monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top) / devicePixelRatio)); ui.verticalWidget->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); ui.verticalWidget->activateWindow(); /*ui.layoutPreviewWidget->setAttribute(Qt::WA_TranslucentBackground);*/ ui.verticalWidget->showFullScreen(); currentScreenRect.adjust(0, 0, 0, 1); ui.verticalWidget->setGeometry(currentScreenRect); ui.verticalWidget->show(); pWindowPage->setFocus(); /* 让全屏后这些面板仍然显示在最前面,不会被遮挡 */ pFishEyeControlDialog->raise(); keepScreenRatio(); if (pZoomRateWidget->isVisible()) { pZoomRateWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Window | Qt::WindowStaysOnTopHint); pZoomRateWidget->show(); pZoomRateWidget->raise(); } else { pZoomRateWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Window | Qt::WindowStaysOnTopHint); } if (pFileResultDialog) { pFileResultDialog->raise(); } if (pEPTZWidget) { pEPTZWidget->raise(); } if (pVideoToolBar->isVisible()) { pVideoToolBar->raise(); } RECT rc; GetWindowRect((HWND)ui.playWidget->winId(), &rc); QPoint ptPlayWidget = IPCAppInstance::getInstance()->getIPCApplication()->coordinateTransforme(this->window(), QPoint(rc.left, rc.top)); if (pScaleImageWidget) { pScaleImageWidget->move(ptPlayWidget.x(), ptPlayWidget.y() + ui.playWidget->height() - pScaleImageWidget->height()); pScaleImageWidget->raise(); } /* 更新时间轴偏移量 */ QPoint ptTimeControlPos = ui.timeControlWidget->mapToGlobal(QPoint(0, 0)); QPoint ptTimelinePos = ui.playTimeWidget->mapToGlobal(QPoint(0, 0)); ui.playTimeWidget->setTimeLineXOffset(ptTimeControlPos.x() - ptTimelinePos.x() + ui.timeControlWidget->width() / 2); }
最新发布
11-27
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值