Qt实现海康OSD拖动Demo

在 Qt 中可以通过组合 QLabel 和鼠标事件来实现这个需求。以下是一个简单的实现步骤:

  1. 使用 QLabel 显示文本。
  2. QLabel 启用鼠标事件,通过重写其 mousePressEvent, mouseMoveEventmouseReleaseEvent 实现拖动功能。
  3. QLabel 设置为窗口的子控件,限制它的移动范围在窗口内。
cpp 复制代码
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QMouseEvent>

class DraggableLabel : public QLabel {
    Q_OBJECT

public:
    explicit DraggableLabel(QWidget *parent = nullptr) : QLabel(parent), m_isDragging(false) {
        setText("拖动我!");
        setStyleSheet("background-color: lightblue; padding: 5px; border: 1px solid black;");
        setAlignment(Qt::AlignCenter);
        setFixedSize(100, 50);
    }

protected:
    void mousePressEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            m_isDragging = true;
            m_dragStartPosition = event->pos();
        }
    }

    void mouseMoveEvent(QMouseEvent *event) override {
        if (m_isDragging) {
            QPoint newPos = mapToParent(event->pos() - m_dragStartPosition);
            QRect parentRect = parentWidget()->rect();

            // 限制 QLabel 不超出父窗口范围
            newPos.setX(qMax(parentRect.left(), qMin(newPos.x(), parentRect.right() - width())));
            newPos.setY(qMax(parentRect.top(), qMin(newPos.y(), parentRect.bottom() - height())));

            move(newPos);
        }
    }

    void mouseReleaseEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            m_isDragging = false;
        }
    }

private:
    bool m_isDragging;
    QPoint m_dragStartPosition;
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    window.setWindowTitle("可拖动文本");
    window.resize(400, 300);

    DraggableLabel *label = new DraggableLabel(&window);
    label->move(150, 125); // 初始位置

    window.show();
    return app.exec();
}

#include "main.moc"
相关推荐
苦夏木禾1 分钟前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉9 分钟前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
wei_shuo1 小时前
飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
java·开发语言·飞算javaai
熊猫钓鱼>_>1 小时前
用Python解锁图像处理之力:从基础到智能应用的深度探索
开发语言·图像处理·python
GO兔1 小时前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
好开心啊没烦恼2 小时前
Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy·pandas
future14123 小时前
C#学习日记
开发语言·学习·c#
king_harry3 小时前
Java程序-OceanBase Connector/J 示例
开发语言
傻啦嘿哟4 小时前
Python 办公实战:用 python-docx 自动生成 Word 文档
开发语言·c#
翻滚吧键盘4 小时前
js代码09
开发语言·javascript·ecmascript