————————————mainwindow.h————————————
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
class DraggableLabel : public QLabel
{
Q_OBJECT
public:
explicit DraggableLabel(QWidget *parent = nullptr) : QLabel(parent), isDragging(false) {}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
isDragging = true;
dragStartPosition = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (isDragging) {
int dx = event->pos().x() – dragStartPosition.x();
int dy = event->pos().y() – dragStartPosition.y();
// 获取父窗口尺寸
QWidget *parentWidget = this->parentWidget();
// 计算新位置,确保不会超出父窗口边界
int newX = qMax(0, qMin(this->pos().x() + dx, parentWidget->width() – this->width()));
int newY = qMax(0, qMin(this->pos().y() + dy, parentWidget->height() – this->height()));
// 移动到新的位置
move(newX, newY);
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
isDragging = false;
}
}
private:
bool isDragging;
QPoint dragStartPosition;
};
#endif // MAINWINDOW_H
————————————mainwindow.cpp——————————————————-
#include “mainwindow.h”
#include “ui_mainwindow.h”
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget *subWindow = new QWidget(this);
subWindow->setGeometry(50, 50, 1500, 800); // 设置子窗口的位置和大小
subWindow->setStyleSheet(“background-color: lightgray;”); // 设置子窗口背景色
// 创建并设置图片
QPixmap pixmap(“/home/yue/11111.jpg”);
DraggableLabel *label = new DraggableLabel(subWindow);
label->setPixmap(pixmap);
label->setGeometry(10, 10, pixmap.width(), pixmap.height()); // 设置初始位置和大小
}
MainWindow::~MainWindow()
{
delete ui;
}