当前位置: 首页 > wzjs >正文

首次进入网站时给一个alert怎么做新网站快速排名软件

首次进入网站时给一个alert怎么做,新网站快速排名软件,网站搜索显示图片,wordpress插件拖拽在Qt中实现无边框窗口的鼠标事件处理&#xff0c;主要涉及窗口拖动和调整大小功能。以下是分步实现的代码示例&#xff1a; 1. 创建无边框窗口 首先&#xff0c;创建一个继承自QWidget的自定义窗口类&#xff0c;并设置无边框标志&#xff1a; #include <QWidget> #in…

在Qt中实现无边框窗口的鼠标事件处理,主要涉及窗口拖动和调整大小功能。以下是分步实现的代码示例:

1. 创建无边框窗口

首先,创建一个继承自QWidget的自定义窗口类,并设置无边框标志:

#include <QWidget>
#include <QMouseEvent>class FramelessWindow : public QWidget {Q_OBJECTpublic:FramelessWindow(QWidget *parent = nullptr) : QWidget(parent) {setWindowFlags(Qt::FramelessWindowHint);setMouseTracking(true); // 启用鼠标追踪}
};

2. 处理窗口拖动

在标题栏区域按下鼠标左键时拖动窗口:

protected:void mousePressEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton) {if (isInDragRegion(event->pos())) {m_dragging = true;m_dragStartPos = event->globalPos();m_windowPos = pos();}}QWidget::mousePressEvent(event);}void mouseMoveEvent(QMouseEvent *event) override {if (m_dragging) {QPoint delta = event->globalPos() - m_dragStartPos;move(m_windowPos + delta);}QWidget::mouseMoveEvent(event);}void mouseReleaseEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton) {m_dragging = false;}QWidget::mouseReleaseEvent(event);}private:bool m_dragging = false;QPoint m_dragStartPos;QPoint m_windowPos;bool isInDragRegion(const QPoint &pos) const {// 假设标题栏高度为30像素return pos.y() < 30;}

3. 实现调整窗口大小

检测边缘并调整窗口大小:

protected:enum ResizeDirection { None, Left, Right, Top, Bottom, TopLeft, TopRight, BottomLeft, BottomRight };ResizeDirection m_resizeDir = None;void checkResizeRegion(const QPoint &pos) {const int borderWidth = 5;QRect rect = this->rect();bool left = pos.x() <= borderWidth;bool right = pos.x() >= rect.width() - borderWidth;bool top = pos.y() <= borderWidth;bool bottom = pos.y() >= rect.height() - borderWidth;if (left && top) m_resizeDir = TopLeft;else if (right && top) m_resizeDir = TopRight;else if (left && bottom) m_resizeDir = BottomLeft;else if (right && bottom) m_resizeDir = BottomRight;else if (left) m_resizeDir = Left;else if (right) m_resizeDir = Right;else if (top) m_resizeDir = Top;else if (bottom) m_resizeDir = Bottom;else m_resizeDir = None;}void mousePressEvent(QMouseEvent *event) override {// ... 原有拖动处理 ...checkResizeRegion(event->pos());if (m_resizeDir != None) {m_resizing = true;m_resizeStartPos = event->globalPos();m_initialGeometry = geometry();}}void handleResize(const QPoint &globalPos) {QRect newGeometry = m_initialGeometry;QPoint delta = globalPos - m_resizeStartPos;switch (m_resizeDir) {case Left:newGeometry.setLeft(newGeometry.left() + delta.x());break;case Right:newGeometry.setRight(newGeometry.right() + delta.x());break;case Top:newGeometry.setTop(newGeometry.top() + delta.y());break;case Bottom:newGeometry.setBottom(newGeometry.bottom() + delta.y());break;case TopLeft:newGeometry.setTopLeft(newGeometry.topLeft() + delta);break;case TopRight:newGeometry.setTopRight(newGeometry.topRight() + delta);break;case BottomLeft:newGeometry.setBottomLeft(newGeometry.bottomLeft() + delta);break;case BottomRight:newGeometry.setBottomRight(newGeometry.bottomRight() + delta);break;}// 限制最小尺寸newGeometry = newGeometry.normalized().adjusted(0, 0, 1, 1);if (newGeometry.width() < minimumWidth() || newGeometry.height() < minimumHeight())return;setGeometry(newGeometry);}

4. 更新光标形状

根据鼠标位置调整光标:

    void updateCursorShape(const QPoint &pos) {checkResizeRegion(pos);switch (m_resizeDir) {case Left:case Right:setCursor(Qt::SizeHorCursor);break;case Top:case Bottom:setCursor(Qt::SizeVerCursor);break;case TopLeft:case BottomRight:setCursor(Qt::SizeFDiagCursor);break;case TopRight:case BottomLeft:setCursor(Qt::SizeBDiagCursor);break;default:unsetCursor();}}

5. 双击最大化

双击标题栏切换最大化:

    void mouseDoubleClickEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton && isInDragRegion(event->pos())) {toggleMaximize();}QWidget::mouseDoubleClickEvent(event);}void toggleMaximize() {isMaximized() ? showNormal() : showMaximized();}

完整示例代码

整合以上代码,完整的无边框窗口类如下:

#include <QWidget>
#include <QMouseEvent>
#include <QCursor>class FramelessWindow : public QWidget {Q_OBJECTpublic:FramelessWindow(QWidget *parent = nullptr) : QWidget(parent) {setWindowFlags(Qt::FramelessWindowHint);setMouseTracking(true);}protected:void mousePressEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton) {if (isInDragRegion(event->pos())) {m_dragging = true;m_dragStartPos = event->globalPos();m_windowPos = pos();} else {checkResizeRegion(event->pos());if (m_resizeDir != None) {m_resizing = true;m_resizeStartPos = event->globalPos();m_initialGeometry = geometry();}}}QWidget::mousePressEvent(event);}void mouseMoveEvent(QMouseEvent *event) override {if (!m_resizing && !m_dragging)updateCursorShape(event->pos());if (m_dragging) {QPoint delta = event->globalPos() - m_dragStartPos;move(m_windowPos + delta);} else if (m_resizing) {handleResize(event->globalPos());}QWidget::mouseMoveEvent(event);}void mouseReleaseEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton) {m_dragging = false;m_resizing = false;m_resizeDir = None;unsetCursor();}QWidget::mouseReleaseEvent(event);}void mouseDoubleClickEvent(QMouseEvent *event) override {if (event->button() == Qt::LeftButton && isInDragRegion(event->pos())) {toggleMaximize();}QWidget::mouseDoubleClickEvent(event);}private:bool m_dragging = false;QPoint m_dragStartPos;QPoint m_windowPos;bool m_resizing = false;QPoint m_resizeStartPos;QRect m_initialGeometry;enum ResizeDirection {None, Left, Right, Top, Bottom,TopLeft, TopRight, BottomLeft, BottomRight};ResizeDirection m_resizeDir = None;bool isInDragRegion(const QPoint &pos) const {return pos.y() < 30; // 标题栏区域高度}void checkResizeRegion(const QPoint &pos) {const int border = 5;bool left = pos.x() <= border;bool right = pos.x() >= width() - border;bool top = pos.y() <= border;bool bottom = pos.y() >= height() - border;if (left && top) m_resizeDir = TopLeft;else if (right && top) m_resizeDir = TopRight;else if (left && bottom) m_resizeDir = BottomLeft;else if (right && bottom) m_resizeDir = BottomRight;else if (left) m_resizeDir = Left;else if (right) m_resizeDir = Right;else if (top) m_resizeDir = Top;else if (bottom) m_resizeDir = Bottom;else m_resizeDir = None;}void updateCursorShape(const QPoint &pos) {checkResizeRegion(pos);switch (m_resizeDir) {case Left: case Right:setCursor(Qt::SizeHorCursor); break;case Top: case Bottom:setCursor(Qt::SizeVerCursor); break;case TopLeft: case BottomRight:setCursor(Qt::SizeFDiagCursor); break;case TopRight: case BottomLeft:setCursor(Qt::SizeBDiagCursor); break;default:unsetCursor();}}void handleResize(const QPoint &globalPos) {QRect newGeo = m_initialGeometry;int deltaX = globalPos.x() - m_resizeStartPos.x();int deltaY = globalPos.y() - m_resizeStartPos.y();switch (m_resizeDir) {case Left:newGeo.setLeft(newGeo.left() + deltaX);break;case Right:newGeo.setRight(newGeo.right() + deltaX);break;case Top:newGeo.setTop(newGeo.top() + deltaY);break;case Bottom:newGeo.setBottom(newGeo.bottom() + deltaY);break;case TopLeft:newGeo.setTopLeft(newGeo.topLeft() + QPoint(deltaX, deltaY));break;case TopRight:newGeo.setTopRight(newGeo.topRight() + QPoint(deltaX, deltaY));break;case BottomLeft:newGeo.setBottomLeft(newGeo.bottomLeft() + QPoint(deltaX, deltaY));break;case BottomRight:newGeo.setBottomRight(newGeo.bottomRight() + QPoint(deltaX, deltaY));break;}if (newGeo.width() < minimumWidth() || newGeo.height() < minimumHeight())return;setGeometry(newGeo);}void toggleMaximize() {isMaximized() ? showNormal() : showMaximized();}
};

注意事项

  • 边缘检测:调整边缘检测的阈值(如border = 5)以适应不同需求。
  • 最小尺寸:确保窗口不会调整到小于minimumWidthminimumHeight
  • 最大化处理:在最大化状态下可能需要禁用调整大小或特殊处理拖动行为。
  • 性能优化:避免频繁的几何计算影响性能。

通过以上步骤,即可在Qt的无边框窗口中实现完整的鼠标交互功能。


文章转载自:

http://B7mIwo23.csptr.cn
http://rJVtee0y.csptr.cn
http://Htev5YWZ.csptr.cn
http://SUC5GngR.csptr.cn
http://a6NWAi5T.csptr.cn
http://sGhVc5aL.csptr.cn
http://VRWkHvhM.csptr.cn
http://dwfXgw8I.csptr.cn
http://c2XjWYqY.csptr.cn
http://NnHkrEyT.csptr.cn
http://HNHiM52f.csptr.cn
http://HAontupc.csptr.cn
http://vKjBRdN4.csptr.cn
http://Y1H68OK2.csptr.cn
http://kUECaS7G.csptr.cn
http://gQgZRrGw.csptr.cn
http://g8hvHYeF.csptr.cn
http://igRGPHCU.csptr.cn
http://prsCfefd.csptr.cn
http://7Uos5URs.csptr.cn
http://qqfBP55n.csptr.cn
http://L0TSCo06.csptr.cn
http://TKPlGUKI.csptr.cn
http://7oK1LVLN.csptr.cn
http://YoG438xG.csptr.cn
http://p3KhV37P.csptr.cn
http://loRDesdM.csptr.cn
http://MISMGswF.csptr.cn
http://QrkljDJO.csptr.cn
http://OExtltde.csptr.cn
http://www.dtcms.com/wzjs/601619.html

相关文章:

  • 传奇网站制作网做淘宝主页网站
  • 高端品牌网站建设哪家好深圳网站建设方案外包
  • 购物网站公司要花费多少钱北京确诊病例活动轨迹公布
  • 医院网站制作多少钱怎么查找网站
  • 网站建设 利润有关小城镇建设网站
  • 前端做学校网站教务wordpress注册登录修改密码
  • 商业网站开发实训总结工程竣工验收公示网
  • 济源专业做网站公司seo优化一般多少钱
  • 单页网站产品网站内页百度提交口
  • 可以做app的网站有哪些wordpress分类目录title
  • 安徽seo网站推广wordpress查询数据库
  • 淮安市城市建设档案馆网站腾讯企业邮箱登录入口微信扫码
  • 响应式网站建设的未来发展6win7如何做网站服务器
  • 网站建设 荆州做爰的视频网站
  • 网站建设费用预算模板万网定制网站怎么样
  • 网站内嵌地图信宜网站建设公司
  • 网站建设评判茗匠智能门店管理系统
  • 公司建站详细步骤微信小程序注册方式
  • 中国行业网站联盟中国城乡建设部证件查询网站
  • 世界做火的游戏视频网站西安网站建设市场
  • 竖导航网站如何注册企业邮箱免费
  • 网站设计与网页制作团队扬州室内设计公司排名
  • 手机网站html5编程网页
  • 建站公司杭州高端公司网站建设
  • 网站建设土豆视频教程私人网站开发公司
  • 工作室做网站美食网页设计模板代码
  • 土特产 网站源码做公司网站费用
  • 网站建设公司特点grimhelm.wordpress
  • 可做外链的视频网站用dw做销售网站
  • 教育机构招聘网站建设移动分销系统代理