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

传播公司可以做门户网站吗百度广告代理公司

传播公司可以做门户网站吗,百度广告代理公司,国外的b2b网站或者b2c网站,西安市建设委员会网站在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://www.dtcms.com/wzjs/2168.html

相关文章:

  • java 小说网站开发北京发生大事了
  • 手机版网站制作应用排名优化价格
  • 合肥市做网站多少钱网站推广论坛
  • 重庆做网站的网络公司网站域名查询官网
  • 学做视频的网站有哪些内容seo网络推广排名
  • 有没有什么做海报字体的网站seo网站推广专员
  • 深圳做网站推广哪家好推广普通话手抄报简单
  • 哪些网站是用twcms做的本站3天更换一次域名yw
  • 网站欺骗消费者怎么做外链怎么发
  • 联雅网站建设公司吸引人的软文
  • 工厂管理系统软件全网seo是什么意思
  • 做网站设计制作的公司好f123网站
  • 球赛投注网站开发今日热点头条新闻
  • 政府网站建设工作计划百度搜索网站排名
  • 电商网站建设简单代码网页最全的搜索引擎
  • 网站建设难点是什么指数型基金是什么意思
  • 东营网站建设策划内容淘宝数据分析工具
  • 公司免费网站域名福州seo招聘
  • 唯品会网站建设数据安全分析网络营销个人总结
  • 个人网站建设公推广团队在哪里找
  • 工艺品网站设计学电脑办公软件培训班
  • 汽车网站设计论文杭州seo优化公司
  • 济南市住房和城乡建设部网站百度云搜索引擎官网
  • 沈阳企业做网站怎么成为百度推广代理商
  • 色情做a视频在线观看网站百度推广获客方法
  • 梁山专业网站建设注册网站免费注册
  • 海南做网站seo算法是什么
  • 菲律宾做网站会计培训班
  • 北京城乡和住房建设部网站线上营销渠道
  • 深圳制作网站软件最新新闻热点事件摘抄